首页 > 解决方案 > 如何循环绘制数据并将其导出到 R

问题描述

我有一个包含大量数据的数据框,我尝试用它来绘制它:(为每个物种绘制一个图,每个国家都给定一个日期范围)

> ggplot(my_data, aes(x = Date, y = median, group = Specie, color = Specie)) +
+     geom_line() +
+     geom_point() +
+     facet_wrap(vars(Country))

但结果难以辨认,因为我有 100 多个国家/地区

如何循环和导出每个国家/地区的每个地块?

这是数据框的第一行:

    Date   Country Specie median
1   2014-12-29  AT  co    0.1
2   2014-12-29  AT  no2   15.780000000000001
3   2014-12-29  AT  pm10  20.8
4   2014-12-29  AT  pm25  69.5
5   2014-12-29  AT  so2   2.0
6   2014-12-29  AU  co    2.3333333333333335
7   2014-12-29  AU  neph  6.333333333333333
8   2014-12-29  AU  no2   4.314285714285714
9   2014-12-29  AU  o3     13.171428571428569
10  2014-12-29  AU  pm10    11.666666666666666
11  2014-12-29  AU  pm25    18.22222222222222
12  2014-12-29  AU  so2     3.3166666666666664
13  2014-12-29  BE  co     0.1
14  2014-12-29  BE  no2    19.416666666666668
15  2014-12-29  BE  o3  5.666666666666667

标签: rggplot2

解决方案


您想首先将 data.frame 拆分为一个列表,其中每个列表元素都是一个只有一个国家/地区的 data.frame。

df$ID <- paste(df$Country, df$Specie, sep = "_")
df_list <- split(df, df$ID)

然后,您可以遍历列表并制作绘图。

lapply(names(df_list), function(x) {
  p <- ggplot(df_list[[x]], aes(x = Date, y = median, group = Specie, color = Specie)) +
    geom_line() +
    geom_point()
  ggsave(paste0(x, "_plot.png"), plot = p)
})

推荐阅读