我爱R但不幸的是我还有更多要学习的东西我绝对想要。
数据:
Classes 'grouped_df', 'tbl_df', 'tbl' and 'data.frame': 3550 obs. of 18 variables:
$ SAMPLE.ID : Factor w/ 150 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
$ COMMUNITY : chr "com.1" "com.1" "com.1" "com.1" ...
$ NUTRIENT : Factor w/ 25 levels "1","2","3","4",..: 1 2 3 4 5 6 7 8 9 10 ...
$ RATIO : Factor w/ 23 levels "3.2","4","5.4",..: 11 9 6 4 1 14 10 8 5 2 ...
$ PHOS : Factor w/ 5 levels "0.09","0.195",..: 5 5 5 5 5 4 4 4 4 4 ...
$ NIT : Factor w/ 5 levels "1.5482","3.0964",..: 5 4 3 2 1 5 4 3 2 1 ...
$ DATUM : Factor w/ 35 levels "30.08.16","31.08.16",..: 1 1 1 1 1 1 1 1 1 1 ...
$ DAY : int 0 0 0 0 0 0 0 0 0 0 ...
$ TYPE : chr "mono" "mono" "mono" "mono" ...
$ ALGAE : Factor w/ 6 levels "ANK","CHLA","MIX A",..: 5 5 5 5 5 5 5 5 5 5 ...
$ MEAN : num 864 868 882 873 872 ...
$ GROW : num 0.00116 0.00115 0.00113 0.00115 0.00115 ...
$ FLUORO : num NA NA NA NA NA NA NA NA NA NA ...
$ MEAN.MQ : num 0.964 0.969 0.985 0.975 0.973 ...
$ GROW.MQ : num 1.04 1.03 1.02 1.03 1.03 ...
$ carbon : num -764 -913 -1394 -1085 -1039 ...
$ carbon.unit: chr "mikro g per litre" "mikro g per litre" "mikro g per litre" "mikro g per litre" ...
$ growthrate : num NA NA NA NA NA NA NA NA NA NA ...
我在寻找:
我已经创建了大量其他情节,但每次我为每个情节编写相同的代码,然后我必须手动编辑,我真的需要努力工作/结果平衡。
我想用
生成一个ggplotX轴为DAY,Y轴为增长率
我需要为ALGAE&的所有组合生成这样的图表。营养成分。
由于这是很多情节,如果标题会调整会很有帮助。我还想将它们存储在一个列表中,比如这个
plot_list <- list()
我知道ggplot代码应该包含aes_string而不是aes但是我现在已经看了很多问题而且我不能,因为我的生活,想出这个。
帮助会导致严重的缓解,感激甚至心跳跳动
答案 0 :(得分:1)
请尝试在将来包含可重现的数据。有关更多示例,请参阅here。对于此答案,我将使用diamonds
ggplot2
数据集
最简单的方法是使用facet_grid
,这是出于此目的:
ggplot(diamonds
, aes (x = carat
, y = price)) +
geom_smooth() +
facet_grid(clarity~color)
为每对清晰度/颜色(如您的中间因素)提供一个面板。
如果由于某种原因必须将这些作为单独的图表,那么这样的嵌套lapply
应该有效。它设置了两个因子级别中的每一个,然后将数据过滤到只匹配的那些行。 (do
将它们全部放回一个列表中,而不是列表列表中。请注意,这是使用dplyr
进行过滤步骤(以及加载管道)。
allPairs <-
lapply(levels(diamonds$clarity), function(thisClarity){
lapply(levels(diamonds$color), function(thisColor){
diamonds %>%
filter(clarity == thisClarity
, color == thisColor) %>%
ggplot(aes(x = carat
, y = price)) +
geom_smooth() +
ggtitle(paste0("Clarity: ", thisClarity
, "\nColor: ", thisColor))
})
}) %>%
do.call(c, .)
然后,您可以处理该图表列表,但是您当前正在处理它们。
答案 1 :(得分:0)
这应该可以解决问题:
plot_list <- list()
for(i in levels(data$ALGAE)) {
for(j in levels(data$NUTRIENT)) {
dat = data[data$ALGAE == i & data$NUTRIENT == j,]
plt <- ggplot(data = dat, aes(x = DAY, y = GROW)) + geom_point()
plot_list[[paste(i, j, sep = "_")]] = plt
}
}
答案 2 :(得分:0)
我个人喜欢使用plyr / dplyr,它比for循环更紧凑,比lapply更可读,
p <- ggplot(diamonds, aes(x = carat, y = price)) + geom_smooth()
allPairs2 <- plyr::dlply(diamonds, .(clarity, color), "%+%", e1=p)
grid.arrange(grobs = allPairs2)
我使用%+%
作为快捷方式(它会覆盖&#34;模板&#34; plot p
)的数据,但明确定义绘图的匿名函数可能更具可读性,< / p>
allPairs2 <- plyr::dlply(diamonds, .(clarity, color),
function(d) {ggplot(d, aes(x = carat, y = price)) + geom_smooth()})