【问题标题】:how to plot multiple plots on ggplots with lapply如何使用 lapply 在 ggplots 上绘制多个图
【发布时间】:2015-07-03 03:25:51
【问题描述】:
library(ggplot2)
x<-c(1,2,3,4,5)
a<-c(3,8,4,7,6)
b<-c(2,9,4,8,5)

df1 <- data.frame(x, a, b)

x<-c(1,2,3,4,5)
a<-c(6,5,9,4,1)
b<-c(9,5,8,6,2)

df2 <- data.frame(x, a, b)

df.lst <- list(df1, df2)

plotdata <- function(x) {
  ggplot(data = x, aes(x=x, y=a, color="blue")) + 
    geom_point() +
    geom_line()
}

lapply(df.lst, plotdata)

我有一个数据框列表,我试图在同一个 ggplot 上绘制相同的列。我尝试使用上面的代码,但它似乎只返回一个情节。

应该有 2 个 ggplots。一个绘制了“a”列数据,另一个绘制了列表中两个数据框的“b”列数据。

我查看了很多示例,看来这应该可行。

【问题讨论】:

  • library(gridExtra) ; do.call(grid.arrange, lapply(df.lst, plotdata))

标签: r ggplot2


【解决方案1】:

它们都被绘制。如果您使用的是 RStudio,请单击后退箭头在图之间切换。如果您想一起看到它们,请执行以下操作:

library(gridExtra)
do.call(grid.arrange,lapply(df.lst, plotdata))

【讨论】:

  • 还要注意,如果你想让这些水平排列,那就有点棘手了:do.call(grid.arrange,c(lapply(df.lst, plotdata), nrow=1, ncol=2) )
  • 是的,它们都绘制,但问题是它们绘制在 2 个单独的图表上。我希望它们绘制在同一个图表上,而不是 2 个单独的图表上。
  • 啊,好吧,我想大多数人会称之为一个情节,而不是多个情节。而且我认为lapply 在那里没有帮助。但请参阅其他答案。
【解决方案2】:

如果你想让它们在同一个情节上,很简单:

ggplot(data = df1, aes(x=x, y=a), color="blue") + 
  geom_point() +
  geom_line() +
  geom_line(data = df2, aes(x=x, y=a), color="red") +
  geom_point(data = df2, aes(x=x, y=a), color="red")

编辑:如果您有其中几个,最好将它们组合成一个大数据集,同时保留原始 df 以用于美学。示例:

df.lst <- list(df1, df2)

# put an identifier so that you know which table the data came from after rbind
for(i in 1:length(df.lst)){
  df.lst[[i]]$df_num <- i
}
big_df <- do.call(rbind,df.lst) # you could also use `rbindlist` from `data.table`

# now use the identifier for the coloring in your plot
ggplot(data = big_df, aes(x=x, y=a, color=as.factor(df_num))) + 
    geom_point() +
    geom_line() + scale_color_discrete(name="which df did I come from?")
    #if you wanted to specify the colors for each df, see ?scale_color_manual instead

【讨论】:

  • 抱歉造成误会。这就是我的意思,但是我的列表中有大约 50 个数据帧,每个数据帧大约 12 列,我正在从一个将更改的文件中读取这些数据帧。我发布的只是一个例子。这就是为什么我需要使用 lapply。
  • 这很棒。谢谢
猜你喜欢
  • 1970-01-01
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多