我已经阅读了大量的职位有关使用循环的ggplot产生大量图形的图形,但找不到任何解释我的问题...与ggplots环路产生具有相同的值,但不同的标题
我有一个数据框,并试图循环使用92列,为每列创建一个新图。我想将每个绘图保存为一个单独的对象。当我运行我的循环(下面的代码)并打印图形时,所有图形都是正确的。但是,当我使用assign()更改print()命令时,图形不正确。标题正在改变,但它们的图形值完全相同(它们都是最终图形的值)。我发现这一点,因为当我使用plot_grid()生成10个图的数字时,图形标题和轴标签都是正确的,但是这些值是相同的!
我的数据集很大,所以我提供了一个小数据集供下面的图解说明。
样品datafame:
library(ggplot)
library(cowplot)
df <- as.data.frame(cbind(group=c(rep("A", 4), rep("B", 4)), a=sample(1:100, 8), b=sample(100:200, 8), c=sample(300:400, 8))) #make data frame
cols <- 2:4 #define columns for plots
for(i in 1:length(cols)){
df[,cols[i]] <- as.numeric(as.character(df[,cols[i]]))
} #convert columns to numeric
图:
for (i in 1:length(cols)){
g <- ggplot(df, aes(x=group, y=df[,cols[i]])) +
geom_boxplot() +
ggtitle(colnames(df)[cols[i]])
print(g)
assign(colnames(df)[cols[i]], g) #generate an object for each plot
}
plot_grid(a, b, c)
我想,当ggplots使情节,它只是呈现从我的终值数据?或者像那样的东西?有没有解决的办法?
我希望这样做,因为有很多图我想做,然后我想混合和匹配数字图。
谢谢!
非常感谢您的详细解答Graeme。我必须想一想,当地在做什么,并重新定义'我'。 – Harry
'aes()'应该引用变量名称,而不是数字向量,如'df [,i]'。这样做会导致意想不到的结果,如绘制错误的数据而不注意。更不要说使用'<< - '或者'assign'几乎总是一个清楚的迹象,表明R中的问题会出错。 – baptiste