使用 R,我尝试使用 gganimate 制作一个基于 x 轴从左到右显示的折线图。我已经设法做到了这一点,但我还想做的是使scale_x_continuous(limits = c(i-5,i+5)),即在正在显示的点和窗口周围有一个窗口将继续前进,同时揭示下一点。
我尝试了很多方法来实现这一点,包括在带有和不带有 aes() 的scale_x_continuous 中实现某种循环。似乎什么都不起作用。我对 ggplot2 特别是 gganimate 很陌生,但我在网上找不到任何帮助。我有一种感觉,答案可能很简单,但我只是错过了。
有点像这样,但使用 gganimate:

以下是一些可重现的代码,向您大致展示我到目前为止所做的事情。
library(ggplot2)
library(gganimate)
library(gifski)
library(png)
Step <- c(1:50,1:50)
Name <- c(rep("A",50), rep("B",50))
Value <- c(runif(50,0,10), runif(50,10,20))
Final <- data.frame(Step, Name, Value)
a <- ggplot(Final, aes(x = Step, y = Value, group = Name, color = factor(Name))) +
geom_line(size=1) +
geom_point(size = 2) +
transition_reveal(Step) +
coord_cartesian(clip = 'off') +
theme_minimal() +
theme(plot.margin = margin(5.5, 40, 5.5, 5.5)) +
theme(legend.position = "none")
options(gganimate.dev_args …Run Code Online (Sandbox Code Playgroud) 我有些卡住。是否有比下面更好的方法将NA视为其中的“实际值”进行值匹配mutate?
library(dplyr)
data_foo <- data.frame(A= c(1:2, NA, 4, NA), B = c(1, 3, NA, NA, 4))
Run Code Online (Sandbox Code Playgroud)
不是所需的输出:
data_foo %>% mutate(irr = A==B)
#> A B irr
#> 1 1 1 TRUE
#> 2 2 3 FALSE
#> 3 NA NA NA
#> 4 4 NA NA
#> 5 NA 4 NA
data_foo %>% rowwise() %>% mutate(irr = A%in%B)
#> Source: local data frame [5 x 3]
#> Groups: <by row>
#>
#> # A tibble: 5 x 3 …Run Code Online (Sandbox Code Playgroud) 我试图用不同的颜色填充下图中的 3 个三角形。

data = data.frame(x=c(125), y=c(220)) #this data is just to be able to use gplot to draw figures
ggplot(data, aes(x = x, y = y)) +
xlim(0,250) +
ylim(-250, 0) +
geom_curve(x = 33, xend = 223, y = -100, yend = -100, curvature = -.65) +
geom_segment(x=128, xend = 33, y=-208, yend = -100) +
geom_segment(x=128, xend = 223, y=-208, yend = -100) +
geom_segment(x=128, xend = 159.67, y=-208, yend = -45) +
geom_segment(x=128, xend = 96.33, …Run Code Online (Sandbox Code Playgroud) 我想获取(在 data.table 的新列中)包含 data.frame 中仅几列中的最大值的列的列名。
这是一个示例 data.frame
# creating the vectors then the data frame ------
id = c("a", "b", "c", "d")
ignore = c(1000,1000, 1000, 1000)
s1 = c(0,0,0,100)
s2 = c(100,0,0,0)
s3 = c(0,0,50,0)
s4 = c(50,0,50,0)
df1 <- data.frame(id,ignore,s1,s2,s3,s4)
Run Code Online (Sandbox Code Playgroud)
(1) 现在我想从 s1-s4 列中找到每行中最大数字的列名。(即忽略名为“忽略”的列)
(2) 如果最大值并列,我希望返回最后一个(例如 s4)列名。
(3) 作为一个额外的好处 - 如果都是 0,我希望 NA 返回
这是我迄今为止最好的尝试
df2 <- cbind(df1,do.call(rbind,apply(df1,1,function(x) {data.frame(max.col.name=names(df1)[which.max(x)],stringsAsFactors=FALSE)})))
Run Code Online (Sandbox Code Playgroud)
这在每种情况下都会返回忽略,并且(b 行除外)如果我删除此列,并将 s1-s4 列重新排序为 s4-s1,则有效。
你会如何处理这个问题?
确实非常感谢。
题:
我对如何为数据框列表中的列批量处理 as.numeric() (或任何其他函数)感到有些困惑。
我知道我可以使用以下方法查看此列表中的特定数据框或列:
> my.list[[1]]
# or columns within this data frame using:
> my.list[[1]][1]
Run Code Online (Sandbox Code Playgroud)
但是当我尝试将其应用于 lapply() 函数以将所有数据从整数更改为数字时,我的麻烦就来了。
# Example of what I am trying to do
> my.list[[each data frame in list]][each column in data frame] <-
as.numberic(my.list[[each data frame in list]][each column in data frame])
Run Code Online (Sandbox Code Playgroud)
如果您能以任何方式帮助我,或者知道任何可以帮助我的资源,我将不胜感激。
背景:
我的数据框的结构如下例所示,其中我有 5 种栖息地类型以及有关单个物种家庭范围扩展到n 的面积的信息:
# Example data
spp.1.data <- data.frame(Habitat.A = c(100,45,0,9,0), Habitat.B = c(0,0,203,45,89), Habitat.C = c(80,22,8,9,20), Habitat.D = c(8,59,77,83,69), Habitat.E = c(23,15,99,0,10))
Run Code Online (Sandbox Code Playgroud)
我有多个具有上述结构的数据框,它们已分配给列表对象:
all.spp.data <- …Run Code Online (Sandbox Code Playgroud) 我正在使用 geom_raster 和 geom_text 在我的情节中的每个彩色矩形上放置一个字母。我也希望这封信出现在图例中的颜色框顶部,但不知道如何。
我尝试添加show.legend=TRUE到geom_text,但这会导致每个图例键中的字母“a”,而不是所需的字符。
所需的结果如下所示:
这是重现基本情节的代码:
library(tidyverse)
d <-tribble(
~a, ~b, ~c,
"a", "l", "A",
"a", "r", "F",
"b", "l", "Q",
"b", "r", "R"
)
ggplot(data=d, aes(x=a, y=b, fill=c)) +
geom_raster(na.rm=TRUE) +
geom_text(aes(label=c), size=3, na.rm=TRUE)
Run Code Online (Sandbox Code Playgroud)
和输出:
这可能与此问题有关:https://github.com/tidyverse/ggplot2/issues/2004,但也许有解决方法?
对于主y轴和x轴,我有通用标题,如"Tank's Ratio"和"Counts".我想要第二行标签,我指定比率和计数.例如.就在"Tank's Ratio"之下,我希望"#in water /#in sand"中的字体较小,但是沿着y轴.类似地,对于x轴.这是基本代码
data <- data.frame(set = c(1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4), density = c(1, 3, 3, 1, 3, 1, 1, 1, 3, 3, 1, 3), counts = c(100, 2, 3, 76, 33, 12, 44, 13, 54, 36, 65, 1), ratio = c(1, 2, 3, 4, 1, 2, 3, 4, 5, 6, 90, 1))
library(ggplot2)
ggplot(data, aes(x = counts, y = ratio)) +
geom_point() +
ylab("Tank's Ratio") +
xlab("Counts")
Run Code Online (Sandbox Code Playgroud) 我想按行检查多列是否全部相等。我想出了一种复杂的方法来计算每组每个值的出现次数。但这似乎有些……麻烦。
样本数据
sample_df <- data.frame(id = letters[1:6], group = rep(c('r','l'),3), stringsAsFactors = FALSE)
set.seed(4)
for(i in 3:5) {
sample_df[i] <- sample(1:4, 6, replace = TRUE)
sample_df
}
Run Code Online (Sandbox Code Playgroud)
期望的输出
library(tidyverse)
sample_df %>%
gather(var, value, V3:V5) %>%
mutate(n_var = n_distinct(var)) %>% # get the number of columns
group_by(id, group, value) %>%
mutate(test = n_distinct(var) == n_var ) %>% # check how frequent values occur per "var"
spread(var, value) %>%
select(-n_var)
#> # A tibble: 6 x 6
#> # Groups: id, group …Run Code Online (Sandbox Code Playgroud) 我通过互联网搜索,但找不到解决我问题的方法。
为了更明确地说,我们有一个带有两个图例的图形,如下所示:
library(ggplot2)
ggplot() +
geom_point(data = mtcars, aes(x = disp, y = mpg, color = gear),
pch =20, size=18) +
geom_line(data = mtcars, aes(x = disp, y = mpg, size = disp/mpg*100)) +
scale_size(range = c(0,3.5)) +
guides(size = guide_legend("", order = 1, keywidth = 2, keyheight = 1.5),
color = guide_legend("", order = 2, keywidth = 1, keyheight = 1 )) +
labs(x = "disp", y = "mpg") +
geom_text(size=2.7, color = "grey29", vjust=-0.8) +
theme_bw()
# ggsave("trial.png", …Run Code Online (Sandbox Code Playgroud) 我不想用 ggplot 绘制矩阵。
这是一些示例代码:
# create a dummy matrix
d2 <- matrix(data=NA,nrow=21,ncol=21,dimnames=list(-10:10,-10:10))
sig <- 3; mx <- 0; my <- 0;
for (jr in as.numeric(dimnames(d2)[[1]])){
for (jc in as.numeric(dimnames(d2)[[2]])){
d2[jr+11,jc+11] <- 1/sig/(2*pi)^.5*exp(-((jr-mx)^2+(jc-my)^2)/2/sig^2)
}
}
# convert it to dataframe
d2.df <- data.frame(x=rep(as.numeric(dimnames(d2)[[1]]),each=ncol(d2)),y=rep(as.numeric(dimnames(d2)[[2]]),times=nrow(d2)),z=as.vector(d2))
# plot with geom_tiles
library(ggplot2)
ggplot(data=d2.df,aes(x=x,y=y,fill=z))+
geom_tile()
Run Code Online (Sandbox Code Playgroud)
可以在不将其转换为数据帧的情况下完成此操作吗?