Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试在for循环中创建ggplot对象列表;列表中的所有项都作为循环的最后一次迭代写入_R_Ggplot2 - Fatal编程技术网

尝试在for循环中创建ggplot对象列表;列表中的所有项都作为循环的最后一次迭代写入

尝试在for循环中创建ggplot对象列表;列表中的所有项都作为循环的最后一次迭代写入,r,ggplot2,R,Ggplot2,我想建立一个ggplot对象列表。我想在x轴上绘制一个变量,但在y轴的数据框中绘制其他每个变量。当我运行循环时,我的所有值最终都与最后一个变量相同 我希望使用grid.arrange函数在一页上绘制所有图形 我的雷普雷克斯: library(ggplot2) l <- list() for(i in 2:11){ p <- ggplot(mtcars, aes(x = mpg, y = mtcars[,i])) + geom_smooth() + geom_point()

我想建立一个ggplot对象列表。我想在x轴上绘制一个变量,但在y轴的数据框中绘制其他每个变量。当我运行循环时,我的所有值最终都与最后一个变量相同

我希望使用grid.arrange函数在一页上绘制所有图形

我的雷普雷克斯:

library(ggplot2)

 l <- list()
for(i in 2:11){
    p <- ggplot(mtcars, aes(x = mpg, y = mtcars[,i])) + geom_smooth() + geom_point()
    name <- paste("p",i,sep="_")
    tmp <- list(p)
    l[[name]] <- tmp
}
print(l$p_2)
print(l$p_3)
库(ggplot2)

l在调用
ggplot
之前对数据帧进行子集划分,然后使用
aes_string
将列名作为字符串调用

library(ggplot2)

l <- list()
for(i in 2:11){
  temp <- mtcars[, c(1, i)]
  p <- ggplot(temp, aes_string(x = "mpg", y = names(temp)[2])) + geom_smooth() + geom_point()
  name <- paste("p",i,sep="_")
  tmp <- list(p)
  l[[name]] <- tmp
}
print(l$p_2)

您可以直接使用
sapply
创建绘图列表。例如:

plist = sapply(names(mtcars)[-grep("mpg", names(mtcars))], function(col) {
  ggplot(mtcars, aes_string(x = "mpg", y = col)) + geom_smooth() + geom_point()
}, simplify=FALSE)
列表元素(每个元素都是ggplot对象)将以绘图中的y变量命名:

names(plist)
您可以通过在控制台中键入
plist
打印所有打印。或者,对于单个绘图,只需选择所需的绘图:

plist[["hp"]]

对于这种情况,您可能更喜欢刻面,这需要将数据从宽格式转换为长格式。通过设置
scales=“free\u y”
,可以使镶嵌面具有不同的y比例


使用循环可能不是解决问题的最佳方法。最好描述你最初的问题,而不是你假设的问题解决方案。需要帮忙吗?我确实在前两句话中描述了我原来的问题。您发送的链接不相同。我不能在同一张图上绘图,因为我的变量具有独特的比例,就像在reprex中一样。我查看了facet_网格,但它使用了aes的静态值(y=)。这是我的tidyverse解决方案,我认为它比下面的解决方案干净得多,现在问题结束了
[1] "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"   "am"   "gear" "carb"
plist[["hp"]]
library(tidyverse)

ggplot(gather(mtcars, key, value, -mpg), aes(mpg, value)) + 
  geom_smooth() + geom_point() +
  facet_wrap(~ key, scales="free_y", ncol=5)