在 lapply 中保存绘图

13

我有一个数据框列表:

str(subsets.d)
List of 22
 $ 1       :'data.frame':   358 obs. of  118 variables:
  ..$ Ac_2017_1 : num [1:358] 0 0 0 0 0 0 0 0 0 0 ...
  ..$ Ac_9808_1 : num [1:358] 0 0 0 0 0 ...
  ..$ dates     : Ord.factor w/ 6 levels "April"<"May"<..: 1 1 1 1 1 1 1 
 $ 19      :'data.frame':   358 obs. of  2 variables:
  ..$ Ac_8598_19: num [1:358] 0.000257 0.000288 0.000171 0 0.000562 ...
  ..$ dates     : Ord.factor w/ 6 levels "April"<"May"<..: 1 1 1 1 1 1 1 

我通过将其转换为长格式来进行操作:

library(reshape2)
subsets.m <- lapply(subsets.d, function(x) melt(x))

然后我想按日期生成箱线图:

library(ggplot2)
lapply(subsets.m, function(x)
  ggplot(x, aes(dates, value)) + geom_boxplot() + facet_wrap(~variable, scale="free_y"))

在 lapply 中是否可以放置 ggsave()pdf()?如果可以,如何根据数据框的名称命名保存的图形?

附加问题:由于列表中的数据框具有不同的维度,因此图形的大小可能会有所不同。我能调整吗?

这里是一些小例子数据:

list1 <- list(
  data.frame(
    Ac_7595_JG37 = c(
      0.000128383, 0.000576914, 0.000341631, 0.000729133, 0.000187486, 0.00086127,
      0.000594978, 0.000631912, 0.000502274, 0.0004846, 0, 0.000148386, 0.000298153,
      0.000828969, 0.000436815, 7.28336e-05, 0.000304842, 0.000301909, 0.000233694,
      0.000208491
    ),
    Ac_7474_JG37 = c(
      0, 0, 0.000512446, 0, 0.000562457, 0, 0.000198326, 0.000473934, 0,
      0.000138457, 0.000132554, 0, 0.000198769, 0.000207242, 0.000145605,
      0.000364168, 0, 0.000301909, 0.000116847, 0
    ),
    dates = ordered(
      rep(c("April", "May"), each = 10L),
      levels = c("April", "May", "June", "August", "October", "November")
    )
  ),
  data.frame(
    Ac_8732_20 = c(
      0.000513534, 0.000384609, 0.000341631, 0.000729133, 0.000937429, 0.000322976,
      0.000297489, 0.000394945, 0.000669698, 0.000346143, 0.000265108, 0.000296773,
      0.000596306, 0.000310863, 0, 0.000509835, 0, 0.000301909, 0.000233694, 0
    ),
    dates = ordered(
      rep(c("April", "May"), each = 10L),
      levels = c("April", "May", "June", "August", "October", "November")
    )
  )
)

2
使用for循环。这是完成此任务的更好选择。 - Roland
是的,你可以这样做,也许deparse(substitute())是一种命名方法。我还使用了为每个data.frame分配一个comment并在保存名称中使用comment(df)的方法。 - MichaelChirico
1
你的例子中有哪些名称?你想以什么方式“调整”不同大小呢? - lukeA
1个回答

11

你的图形存储在一个列表中,因此可以在输出上使用lapply来保存它们。这个问题已经在这里得到了回答:Saving a list of plots by their names()

# create data for this example (data above too involved)
df <- data.frame(value = rnorm(100), dates = rep(1:50, 2), type = rep(c("a", "b")))
list1 <- split(df, df$type)


plots <- lapply(list1, function(x) ggplot(x, aes(dates, value)) + geom_boxplot())

lapply(names(plots), 
       function(x) ggsave(filename=paste(x,".jpeg",sep=""), plot=plots[[x]]))

3
在第一个lapply中,你还应该能够将ggsave包装在ggplot周围。 - Raad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接