从具有非标准求值的for循环生成绘图
我正在尝试使用从具有非标准求值的for循环生成绘图,r,for-loop,ggplot2,R,For Loop,Ggplot2,我正在尝试使用R中的ggplot从for循环生成绘图 让我们创建一个数据集: # Libraries library(tidyverse) # Set seed set.seed(123) # Create data frame df <- data.frame( time = c( rep(1,20), rep(2, 20), rep(3, 20) ), value_a =c(rnorm(n = 60, mean = 50, sd = 10)), value_b =c(
R
中的ggplot
从for循环生成绘图
让我们创建一个数据集:
# Libraries
library(tidyverse)
# Set seed
set.seed(123)
# Create data frame
df <- data.frame(
time = c( rep(1,20), rep(2, 20), rep(3, 20) ),
value_a =c(rnorm(n = 60, mean = 50, sd = 10)),
value_b =c(rnorm(n = 60, mean = 50, sd = 10)),
value_c =c(rnorm(n = 60, mean = 50, sd = 10))
)
接下来,我想为数据帧的每一列生成这些图(时间在x轴上,值在y轴上)。我认为一个for循环就可以做到这一点:
for(i in colnames(df)[-1]){
print(
ggplot(df_a, aes(x= time, y = i)) +
geom_jitter(position=position_jitter(width=0.1)) +
scale_y_continuous(limits = c(0,100))
)
}
它提供了以下错误:
错误:离散值提供给连续刻度
错误的产生是因为for循环中的i
被视为一个字符向量,并且我不能(逻辑上)为离散值提供连续的刻度
在for循环外再现错误:
ggplot(df_a, aes(x= time, y = "value_a")) + # value_a is provided as character vector
geom_jitter(position=position_jitter(width=0.1)) +
scale_y_continuous(limits = c(0,100))
问题
有没有办法防止“value_a”被解释为字符向量,以便我能够控制循环中的比例?或者有没有其他方法可以方便地从数据帧中的不同列生成绘图?我同意PoGibas的意见-重塑为长格式并使用
facet
可能是更好的方法。但是,如果您需要它来创建不同的绘图/图像等,请使用eval(sym(i))
,如下所示:
库(tidyverse)
#播种
种子集(123)
#创建数据帧
df我将熔化并使用facets-这更像是ggplot2
wayHey user213544,要扩展@PoGibas的评论,您熔化(或pivot_longer())df,然后只是值a,值b的子集…例如:df%>%pivot_longer(-time)%%>%filter(name==“value_a”)%%>%ggplot()+几何抖动(aes(x=time,y=value))我已经修改了标题,使其更好地搜索-希望这符合你的想法
ggplot(df_a, aes(x= time, y = "value_a")) + # value_a is provided as character vector
geom_jitter(position=position_jitter(width=0.1)) +
scale_y_continuous(limits = c(0,100))