我有一个包含大量数据的数据框,我尝试用这个绘制它:(为每个物种和每个给定日期范围的国家/地区获取一个图(
> 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
您希望首先将 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)
})
library("readxl")
library(ggplot2)
my_data <- read_excel("lab.xlsx")
library(ggplot2)
pdf("all_plots_file.pdf",onefile = TRUE)
country_list <- as.list(unique(my_data$Country))
for(country in country_list){
data <- subset(my_data, my_data$Country==country)
p<- ggplot(data, aes(x=as.Date(Date,format = "%m/%d/%Y"), median, group = 1, color = Specie)) +
geom_line() +
geom_point() +
xlab("Date") +
ylab("Median") +
labs(title = country) +
theme(axis.title.x = element_text(colour="blue", size=10)) +
theme(axis.title.y = element_text(colour="blue", size=10)) +
scale_x_date(date_labels = "%m/%d/%Y")
plot(p)
}
dev.off()