将绘图添加到列表 ggplot2
Adding plots to a list ggplot2
我正在尝试将 ggplot2 图添加到列表中,以便我可以使用 ggpubr 中的 ggarrange 函数将它们组织到多个页面中。
由于有数百个地块,我正在使用一个函数来生成和保存地块,但我无法将其 return 地块添加到环境中或将名称写入列表。
我相当确定这是我遗漏但无法发现的简单内容。
我使用的绘图函数是:
histFacet.plot <- function(x, results, info, ...) {
md<- names(x) %in% c("rn","Taxa","year","rep","block","column",
"range", "entity_id")
traits <- names(x[ , !md])
for (i in traits) {
i <-ggplot(data = x, aes_string(x = i)) +
geom_histogram(colour="black", fill="white") +
#facet_grid(x$year ~ .) +
theme_bw() +
xlab(paste0(i)) +
ylab("Frequency") +
theme(panel.grid.major = element_blank()) +
theme(panel.grid.minor = element_blank()) +
theme(axis.text = element_text(size = 15)) +
theme(axis.title = element_text(size = 15)) +
theme(strip.text = element_text(size = 15))
#ggsave(paste0(i,"_",info,".pdf"),path=paste(results, sep=''))
plotList<- list(plotList, list(i))
print(i)
}
return(i)
}
histFacet.plot(pd,'~/Dropbox/Research_Poland_Lab/AM Panel/Figures/Hist/',
"_raw_2018")
你的大问题是你 return(i)
而不是 return(plotList)
。在迭代器中使用 i
在 for
循环中重新分配 i
很奇怪。特别是当情节使用 i
作为字符串时......我会试试这个:
histFacet.plot <- function(x, results, info, ...) {
md <- names(x) %in% c("rn","Taxa","year","rep","block","column",
"range", "entity_id")
traits <- names(x[ , !md])
plotList = list()
for (i in traits) {
thisPlot <- ggplot(data = x, aes_string(x = i)) +
geom_histogram(colour="black", fill="white") +
#facet_grid(x$year ~ .) +
theme_bw() +
xlab(i) +
ylab("Frequency") +
theme(panel.grid.major = element_blank()) +
theme(panel.grid.minor = element_blank()) +
theme(axis.text = element_text(size = 15)) +
theme(axis.title = element_text(size = 15)) +
theme(strip.text = element_text(size = 15))
plotList[[i]] = thisPlot
print(i)
}
return(plotList)
}
当然未经测试,因为您没有共享示例数据。如果您提供小型、可重现的示例数据集,我们很高兴 test/debug。
我不太确定你是希望print(i)
将绘图打印到图形设备(如果是,请更改为print(thisPlot)
)还是将当前特征打印到控制台以进行更新在循环中取得进展(如果是这样,请更改为 message(i)
以使其易于禁用)。
一些其他注意事项:如果您使用分面,请使用 year ~ .
作为公式,而不是 x$year ~ .
。如果 i
已经是一个字符,则 paste0(i)
与 i
相同(在您的 xlab
中)。
我正在尝试将 ggplot2 图添加到列表中,以便我可以使用 ggpubr 中的 ggarrange 函数将它们组织到多个页面中。
由于有数百个地块,我正在使用一个函数来生成和保存地块,但我无法将其 return 地块添加到环境中或将名称写入列表。
我相当确定这是我遗漏但无法发现的简单内容。
我使用的绘图函数是:
histFacet.plot <- function(x, results, info, ...) {
md<- names(x) %in% c("rn","Taxa","year","rep","block","column",
"range", "entity_id")
traits <- names(x[ , !md])
for (i in traits) {
i <-ggplot(data = x, aes_string(x = i)) +
geom_histogram(colour="black", fill="white") +
#facet_grid(x$year ~ .) +
theme_bw() +
xlab(paste0(i)) +
ylab("Frequency") +
theme(panel.grid.major = element_blank()) +
theme(panel.grid.minor = element_blank()) +
theme(axis.text = element_text(size = 15)) +
theme(axis.title = element_text(size = 15)) +
theme(strip.text = element_text(size = 15))
#ggsave(paste0(i,"_",info,".pdf"),path=paste(results, sep=''))
plotList<- list(plotList, list(i))
print(i)
}
return(i)
}
histFacet.plot(pd,'~/Dropbox/Research_Poland_Lab/AM Panel/Figures/Hist/',
"_raw_2018")
你的大问题是你 return(i)
而不是 return(plotList)
。在迭代器中使用 i
在 for
循环中重新分配 i
很奇怪。特别是当情节使用 i
作为字符串时......我会试试这个:
histFacet.plot <- function(x, results, info, ...) {
md <- names(x) %in% c("rn","Taxa","year","rep","block","column",
"range", "entity_id")
traits <- names(x[ , !md])
plotList = list()
for (i in traits) {
thisPlot <- ggplot(data = x, aes_string(x = i)) +
geom_histogram(colour="black", fill="white") +
#facet_grid(x$year ~ .) +
theme_bw() +
xlab(i) +
ylab("Frequency") +
theme(panel.grid.major = element_blank()) +
theme(panel.grid.minor = element_blank()) +
theme(axis.text = element_text(size = 15)) +
theme(axis.title = element_text(size = 15)) +
theme(strip.text = element_text(size = 15))
plotList[[i]] = thisPlot
print(i)
}
return(plotList)
}
当然未经测试,因为您没有共享示例数据。如果您提供小型、可重现的示例数据集,我们很高兴 test/debug。
我不太确定你是希望print(i)
将绘图打印到图形设备(如果是,请更改为print(thisPlot)
)还是将当前特征打印到控制台以进行更新在循环中取得进展(如果是这样,请更改为 message(i)
以使其易于禁用)。
一些其他注意事项:如果您使用分面,请使用 year ~ .
作为公式,而不是 x$year ~ .
。如果 i
已经是一个字符,则 paste0(i)
与 i
相同(在您的 xlab
中)。