我的目标是使用lapply
和ggplot2
生成并保存多个条形图。为此,我从数据中创建了一个列表。现在,除了字幕之外,其他所有东西都可以正常工作:我想将列表元素的名称插入图形中。到目前为止,我只能插入第一个元素的名称。
我发现了另一篇文章,到目前为止,对我有很大帮助。我是新来的,所以我希望我以正确的方式发布此问题(我没有找到与该其他帖子相关的选项)。
我改编自this question 因为我对那里提供的案件有后续问题。
###creating some random data:
df <- data.frame(value = floor(runif(20,min=0,max=30)),
Intervall = paste("Intervall",rep(1:10,2)), type = rep(c("a", "b")))
list1 <- split(df, df$type)
###producing plots with lapply and ggplot
plots <- lapply(list1, function(x) {
ggplot(x, aes(Intervall, value)) +
geom_bar(stat="identity") +
labs(title="Intervalle", subtitle =names(list1))})
lapply(names(plots),
function(x) ggsave(filename=paste(x,".emf",sep=""), plot=plots[[x]]))
我列表中的元素称为a
和b
。现在,第一个图应具有字幕"a"
,第二个图应具有字幕"b"
。
我该怎么做? (另外,如何在保存之前先在控制台中看到我的图?)
使用names(list1)
"a"
成为两个图形的字幕…
答案 0 :(得分:1)
该问题与第二个命令无关。它来自“图”的创建。在subtitle
中,我们传递了整个names(list1)
而不是相应的元素。如果我们遍历“ list1”的names
,则为每个列表元素获取对应的名称变得更加容易,而且list
可以基于相同的名称进行子集
plots <- lapply(names(list1), function(nm) {
ggplot(list1[[nm]], aes(Intervall, value)) +
geom_bar(stat="identity") +
labs(title="Intervalle", subtitle =nm)})
names(plots) <- names(list1)
现在,我们使用与OP中相同的命令(将.emf
更改为.png
lapply(names(plots), function(nm) ggsave(filename =
paste(path, nm, ".png", sep=""), plot = plots[[nm]]))
-图
答案 1 :(得分:1)
考虑用by
和split
代替lapply
,并在字幕和文件名 type >参数。
# NAMED LIST OF PLOTS
plots <- by(df, df$type, function(sub) {
p <- ggplot(sub, aes(Intervall, value)) +
geom_bar(stat="identity") +
labs(title="Intervalle", subtitle = sub$type[1])
ggsave(filename=paste0(sub$type[1],".emf"), plot=p)
return(p)
})