ggplot2循环绘图

  • ggplot2的单次展示
  • ggplot2的循环画图

   展示数据的方式有很多,图形无疑是最佳的方法之一,因为图形能更直观地展示数据的变化规律。ggplot2是R语言绘图功能最强大的R包之一,大家肯定非常熟悉,但平时绘图的时候可能需要画同类型图很多次,因此循环绘图是很有必要学习和掌握的。今天主要与大家分享ggplot循环画图及保存导出。

ggplot2的单次展示

首先,我们准备好数据。其中,数据集的x轴为样地(site),y轴为对应物种的丰度(abundance)。

head(df3a)


利用ggplot2包中的geom_bar()绘制柱状图:

df3a %>%ggplot(aes(as.factor(site), Mean, fill=as.factor(site)))+geom_bar(stat = "identity", width = 0.75)+geom_errorbar(aes(ymin=Mean-se, ymax=Mean+se), width=0.15)+scale_fill_manual(values = c('#BBB8DF', '#F8B65C', '#80B1D2', '#FB8071'))+theme_bw()+theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank(),legend.position = "none",axis.text.x = element_text(color = "black", size=12, vjust = 0.5, hjust = 0.5),axis.text.y = element_text(color = "black", size=12),axis.title = element_text(color = "black", size=12))+labs(x="Site", y="Mean")


单次绘图结束,保存导出:

# ggsave 保存pdf
ggsave("df3a.pdf")# export中graph2ppt 保存ppt给格式
graph2ppt(file = "df3a.ppt", append=T)

ggplot2的循环画图

准备一份工作量比较大,需要重复次数较多的数据集,具体示例如下:

head(dfsp)

具体情况如下:目的就是为了绘制相同site下不同年份的图。如果site有30个,也就是意味着需要绘制30张重复的图。重复30次代码,这样看起来有点笨拙和累赘。因此,我们就要学会ggplot的循环绘图来解决这个问题。

接下来,我们需要先构建出需要循环的个数,也就是对应需要重复画图的数量

p <- c(paste0('p',unique(dfsp$site)));p
length(p)

我们以对应的site作为顺序,然后构建了p(site number),可以看出需要循环绘图24次。因此,ggplot循环是非常有意义的。

再定义一个list来打包装载所需循环绘制图的输出格式及名称。

dir <- list()

关键一步,就是循环的思路。其实无非就是ggplot重复了24次,只是替换了数据。其他ggplot绘图参数是一样的,就是绘图数据不同,因此我们需要完成以下步骤就可以了:

1.将数据循环起来;
2.对不同的数据循环绘制;
3.循环导出即可。

循环导出的结果,这里以pdf和ppt格式为例。由于这两种导出的格式,其循环过程不太一样。

1)循环绘图导出pdf格式,具体解读在code中。如果用ggsave来循环导出结果,其需要循环每次绘图时都有对应本次的打印结果(换句话说,也就是你绘图了一张图,要有对应每张图的赋值变量名称,并且要求该名称可以直接打印出图的结果)

for(i in 1:length(unique(dfsp$site))){# 循环的次数就是i in 1:length(unique(dfsp$site))dir[[i]]<-paste("p",unique(dfsp$site)[i],".pdf",sep = "")
# dir的目的是构建循环对应图顺序的导出格式,这里是以pdf为例
# 因为我要用的导出函数为ggsave,该函数还可以导出其他格式,根据自己需求修改
# “.pdf”表示输出的为pdf格式。
# 其中用paste函数批量生成以p开头的名称,px。结果就是刚刚产生的p对应的导出名称,例如:p10.pdf。df_for <- dfsp %>% filter(site==unique(dfsp$site)[i])
# 这行就是循环的关键,循环数据。通过filter函数来循环对应site的情况。# assign函数的作用,就是将对应循环ggplot的结果赋值给p[i]
# 由于i是固定的顺序,因此都可以一一对应。
# ggplot的其他参数都没有修改,就是循环了数据。assign(p[i],ggplot(df_for, aes(as.factor(Year), Mean, fill=as.factor(Year)))+geom_bar(stat = "identity", width = 0.75, position = position_dodge(0.7))+geom_errorbar(aes(ymin=Mean-se, ymax=Mean+se), width=0.15)+scale_fill_manual(values = c('#BBB8DF', '#F8B65C', '#80B1D2', '#FB8071','#8CD3CB','#B780B4'))+geom_text(aes(label=groups, y = Mean+se + 4), position = position_dodge(0.7))+theme_bw()+theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank(),legend.position = "none",axis.text.x = element_text(color = "black", size=12, vjust = 0.5, hjust = 0.5),axis.text.y = element_text(color = "black", size=12),axis.title = element_text(color = "black", size=12))+ggtitle(unique(dfsp$site)[i])+
# 另外,我们为了更好的识别哪张图对应哪个site,我们给每次循环的绘图结果加上title,tile为对应sitelabs(x="Year", y="Mean"))ggsave(file = dir[[i]])
# 最后用ggsave导出循环结果,其中dir[[i]]就是刚开始我们需要循环导出图的名称及格式。
}

循环导出ppt格式,为什么会考虑这个格式呢,其一是:能够导出pdf方便后期一些细节的优化(类似AI和PS),其二是:该导出结果用到的是export包中的graph2ppt(),该函数的循环过程与ggsave过程不一样,它不需要每次都打印循环对应的图,而是直接把最终的结果一次性打印出来,然后用graph2ppt()函数中append=T的参数,表示将所有绘图的结果(24张)都打包到同一个ppt名下,如果append=F,则只会保留最后一个图,因为这样每次导出该名下的结果会覆盖上一次结果。

for(i in 1:length(unique(dfsp$site))){dir[[i]]<-paste("p",unique(dfsp$site)[i],".ppt",sep = "")df_for <- dfsp %>% filter(site==unique(dfsp$site)[i])a <- ggplot(df_for, aes(as.factor(Year), Mean, fill=as.factor(Year)))+geom_bar(stat = "identity", width = 0.75, position = position_dodge(0.7))+geom_errorbar(aes(ymin=Mean-se, ymax=Mean+se), width=0.15)+scale_fill_manual(values = c('#BBB8DF', '#F8B65C', '#80B1D2', '#FB8071','#8CD3CB','#B780B4'))+geom_text(aes(label=groups, y = Mean+se + 4), position = position_dodge(0.7))+theme_bw()+theme(panel.grid.major = element_blank(),panel.grid.minor = element_blank(),legend.position = "none",axis.text.x = element_text(color = "black", size=12, vjust = 0.5, hjust = 0.5),axis.text.y = element_text(color = "black", size=12),axis.title = element_text(color = "black", size=12))+ggtitle(unique(dfsp$site)[i])+labs(x="Year", y="Mean", size=12)print(a)export::graph2ppt(file = "result.ppt",append=T)
}

温馨提醒:导出ppt格式的code写法上与ggsave差异主要体现在,打印结果。可以看到当我们想利用graph2ppt函数导出ppt时,我们是直接用的a作为赋值结果,然后直接print(a)。最后一次性将循环绘图的结果打包到了result该ppt下。(不要忘记加载tidyverse包)

最后从当前路径下可以找到我们的结果:

一共包含24张pdf结果,和1个ppt结果。ppt可以看到有24张结果图。

R语言ggplot2 | 循环画图及导出相关推荐

  1. R语言ggplot2可视化左对齐两个可视化图像的画图区域(边缘)实战

    R语言ggplot2可视化左对齐两个可视化图像的画图区域(边缘)实战 目录 R语言ggplot2可视化左对齐两个可视化图像的画图区域(边缘)实战

  2. R语言使用循环语句一次性画出多幅图

    R语言使用循环语句一次性画出多幅图 首先加载包,patchwork用来一个界面展示多幅图 具体的可以看这篇文章 library(ggplot2) library(patchwork) 以数据iris为 ...

  3. [置顶]R语言 ggplot2包

    R语言  ggplot2包的学习 分析数据要做的第一件事情,就是观察它.对于每个变量,哪些值是最常见的?值域是大是小?是否有异常观测? ggplot2图形之基本语法: ggplot2的核心理念是将绘图 ...

  4. 数据可视化——R语言ggplot2包绘制精美的小提琴图(并箱线图或误差条图组合)

    数据可视化--R语言ggplot2包绘制精美的小提琴图(并箱线图或误差条图组合) 概述:R语言使用ggplot2工具包绘制小提琴图.为了使数据表达更加丰富,同时将小提琴图与箱线图和误差条图相结合.另外 ...

  5. R语言ggplot2可视化

    R语言数据可视化必备利器之ggplot2包 由于最近学习必要画图较多,所以对R语言ggplot2包的使用较多,在此分享一下自己的心得以及体验,如有错误请小伙伴即时更正. ggplot2有着自己的语法, ...

  6. r语言for循环的c(),R语言简单for循环(二)

    创建一个简单数据框 Sys.setlocale('LC_ALL','C') ## [1] "C" library(tidyverse) ## -- Attaching packag ...

  7. R语言ggplot2地理信息可视化(上)

    很荣幸,能来北京参加2018年第十一届中国R会议,并在中国人民大学-R语言数据可视化会场作报告. 本次演讲题目:<R语言ggplot2之地理信息可视化>,本次演讲重点讲解R语言基于ggpl ...

  8. R语言ggplot2地理信息可视化(下)

    很荣幸,能来北京参加2018年第十一届中国R会议,并在中国人民大学-R语言数据可视化会场作报告. 本次演讲题目:<R语言ggplot2之地理信息可视化>,本次演讲重点讲解R语言基于ggpl ...

  9. R语言ggplot2可视化:ggplot2可视化散点图并使用geom_mark_circle函数在数据簇或数据分组的数据点周围添加圆圈进行注释(自定义圆圈的大小)

    R语言ggplot2可视化:ggplot2可视化散点图并使用geom_mark_circle函数在数据簇或数据分组的数据点周围添加圆圈进行注释(自定义圆圈的大小) 目录

最新文章

  1. 纯代码实现wordpress文章隐藏内容评论可见
  2. 过年(2015)读书笔记
  3. bigquery_到Google bigquery的sql查询模板,它将您的报告提升到另一个层次
  4. python中datetime库_一天掌握一个Python库--datetime库
  5. 一页纸API快捷免费高速api接口
  6. “Remote server returned error: (405) method not allowed.”的解决方案
  7. 协议圣经 ARP RARP 六
  8. JDBC 增删改查操作示例
  9. ElasticSearch全文搜索引擎之核心概念和IK分词器篇
  10. ES6、7学习笔记(尚硅谷)-4-模板字符串
  11. mysql 附近3公里的,mysql 查询附近N公里内数据
  12. 百度的“知心搜索”揭秘
  13. 总在说思科华为认证 可你真的清楚它们的区别吗?
  14. boost电路输出电流公式_boost计算公式
  15. 将Ubuntu中文目录改为英文目录
  16. 安全狗下一代网站防篡改产品全面支持容器防篡改
  17. [Python人工智能] 九.gensim词向量Word2Vec安装及《庆余年》中文短文本相似度计算
  18. Mac 通过openCV打开摄像头权限
  19. Manage images
  20. 垃圾分类微信小程序设计python

热门文章

  1. 第二章:MySQL(前篇)
  2. O365 Manager Plus详解
  3. Mingw-w64 -7.3.0版本百度网盘下载地址
  4. Java图形用户界面设计之概述
  5. ie8和html5的兼容性,ie8网页兼容性不完全指南
  6. android 闪烁效果,Android 微光闪烁效果之更强Shimmer-android
  7. Java项目实训——学生成绩查询系统
  8. 博客网站更换模板及插件使用
  9. sencha touch 入门系列 (七)sencha touch 类系统讲解(上)
  10. 2022-09-09 STM32 Jlink SWD接口SEGGER J-Flash烧录调试记录