图形和保存多个过滤器数据-R



我正在处理谷歌分析数据。我有100个不同的谷歌分析活动,我必须为每个活动制作一个图表,很明显,由于活动的数量,我不能使用facet_grid或wrap。

因此,我需要只使用一个活动的数据制作一个图形,然后保存它的png,并制作另一个活动和保存png的新图形,依此类推

图形代码为:

ggplot(Data%>%filter(Cost < 2000000, Impressions < 400000, Campaign == "CAMPAIGN 1"), 
aes( x = Cost, color = CTR, y = Conversions, size = Impressions, shape = Week))+
geom_point()+
scale_size(range = c(0, 10))+
geom_smooth(se = F, show.legend = F, method = "lm")+
labs(title = "Daily Conversions CAMPAIGN 1",
shape = "")+
theme_bw()+
scale_color_viridis_b()

我需要在过滤器功能和实验室中更改活动的过滤器和标题,稍后将图形保存在带有活动名称的png中。

我知道使用for函数可以工作,但我不知道如何使它为每个活动绘制图形。

提前感谢

这个怎么样?

for (i in 1:5) {
name <- paste("Campaign", i)

plot <- ggplot(Data%>%filter(Cost < 2000000, Impressions < 400000, Campaign == name), 
aes( x = Cost, color = CTR, y = Conversions, size = Impressions, shape = Week))+
geom_point()+
scale_size(range = c(0, 10))+
geom_smooth(se = F, show.legend = F, method = "lm")+
labs(title = "Daily Conversions CAMPAIGN 1",
shape = "")+
theme_bw()+
scale_color_viridis_b()

ggsave(plot, paste0("./", name, ".png"))
}

考虑bytapply的面向对象包装器,它允许您按因子对数据帧进行切片,并在子集上运行进程以返回简化的对象(即向量、矩阵(或任何输出的列表:

build_plot <- function(sub) {
plt <- ggplot(filter(sub, Cost < 2000000, Impressions < 400000), 
aes(x = Cost, color = CTR, y = Conversions, size = Impressions, shape = Week)) +
geom_point() +
scale_size(range = c(0, 10)) +
geom_smooth(se = FALSE, show.legend = FALSE, method = "lm") +
labs(title = paste("Daily Conversions", sub$Campaign[1]), shape = "") +
theme_bw() +
scale_color_viridis_b()
ggsave(plot=plt, filename=paste0(sub$Campaign[1], ".png"), units="in", width=12, height=8)
return(plt)
}
plot_list <- by(Data, Data$Campaign, build_plot)

最后,我写了这段代码,并且工作得很好:

List <- c(unique(Data$`Campaign name`))
List
plot_list = list()
for (i in 1:100) {
p = ggplot(Data%>%filter(`Campaign name` == List[i]), aes(x=Cost, y=Conversions)) + geom_point()+
labs(title = "Conversiones Diarias según Inversión",
subtitle = List[i])
plot_list[[i]] = p
ggsave(plot_list[[i]], file=paste0("plot_", i,".png"), width = 32, height = 25, units = "cm")
}

在for循环中没有ggsave部分的另一个选项是在之后运行this for循环

pdf("plots.pdf")
for (i in 1:100) {
print(plot_list[[i]])
}
dev.off()

最新更新