ggplot批量画图

由ggplot绘制成的散点图、箱状图等十分美观,在不少SCI论文中都可以看到它的身影。然而,在涉及到多变量大数据的时候,一行行输入R代码去一个个的绘图不免效率低下。本篇文章将介绍如何使用ggplot批量绘制图形。本篇教程以R自带的数据集 – iris鸢尾花数据 – 为例,将问题简单化为 - 以iris数据集中的前3个变量为自变量,第4个变量Petal.Width为因变量,用ggplot批量绘制散点图,并用简单线性回归拟合。各位读者们可以根据自身需要,对所展示的代码进行更改、深化。

涉及到的知识点如下:

1.iris鸢尾花数据集的简单介绍
2.assign ()和get () 联合使用,存储及调用横/纵坐标的名称
3.for 循环中调用ggplot,实现批量绘图

一. iris鸢尾花数据集的简单介绍:

1. 首先,让我们大致看一下iris鸢尾花数据集中的内容

head(iris)  #用head()语句调用一下iris数据集的前几行数据,得到结果如下:
 Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

可以发现,iris数据集中有5个变量,前4个变量为数值型(numeric),最后一个为字符型 (character)。

2. 其次,我们定义一下iris数据集中的4个数值型变量的英文缩写以及单位 (不一定符合实际)

变量 缩写 单位
Sepal.Length SL mm
Sepal.Width SW mm
Petal.Length PL mm
Petal.Width PW mm

二. assign()和get()联合使用,存储/调用横纵坐标名称:

aasign()就是给变量赋值。此语句的详细解释,见https://www.rdocumentation.org/packages/base/versions/3.6.2/topics/assign

Labels<-NULL
for  (j in 1:1:4){
   Labels[j] <- paste("Labels", j, sep = "")
   assign(Labels[j], NULL)
}  #使用for循环,循环定义4个变量 - Labels1, Labels2, Labels3, Labels4

assign(Labels[1], expression(italic(SL)~"("*"mm"*")"))
assign(Labels[2], expression(italic(SW)~"("*"mm"*")"))
assign(Labels[3], expression(italic(PL)~"("*"mm"*")")) 
assign(Labels[4], expression(italic(PW)~"("*"mm"*")"))  #分别给4个变量赋值 - 即横坐标的名称以及单位

Labels1, Labels2, Labels3, Labels4的调用通过get()函数。嵌套print(),检验是否赋值正确

for  (i in 1:1:4){
     print(get(paste("Labels",i,sep="")))
}   #使用for循环,循环调用 - Labels1, Labels2, Labels3, Labels4 

三. for 循环中调用ggplot,实现批量绘图:

重申一下,本篇教程解决的问题是 - 以iris数据集中的前3个变量为自变量,第4个变量Petal.Width为因变量,用ggplot批量绘制散点图,并用简单线性回归拟合。

先加载程序需要的安装包

library(ggplot2)

for 循环中调用ggplot,实现批量绘图

windowsFonts(roman=windowsFont("Times New Roman"))  #图中字体使用新罗马
options(scipen=200)  #不使用科学计数法

for (i in 1:3){ 
p<-ggplot(data =iris, mapping = aes(x=iris[,i], y=iris[,4]))+
geom_point(alpha = 0.5,size = 8)+   #alpha控制点的透明度,可以辅助检验重合点
geom_smooth(size=3,method=lm,se=FALSE)+
xlab(get(paste("Labels",i,sep="")))+  #用get()函数分别调用前三个自变量(Labels1,Labels2,Labels3)的名称以及单位
ylab(get(paste("Labels",4,sep="")))+ #用get()函数调用第四个因变量(Labels4)的名称以及单位
theme_bw()+ 
theme(axis.text.x = element_text(size=30, face = "bold",family = "roman"))+ 
theme(axis.text.y = element_text(size=30, face = "bold",family = "roman"))+
theme(axis.title.x = element_text(angle = 00, hjust = 0.5, size=50,color="black",family = "roman"))+
theme(axis.title.y = element_text(angle = 90,vjust=0.5, hjust = 0.5, size=50, color="black",family = "roman"))

#存储批量生成的图片
setwd('C:/Users/zhang/Desktop/自媒体/简书/ggplot批量画图/iris')
ggsave(filename=paste(colnames(iris[i]),".png",sep=""),plot=p,width =17,height=10) #以自变量的名称为文件名
}

用Photoshop排了一下版(也可以直接用R排版,但是稍微有些许麻烦),得到散点图集如下:


Fig.1 Scatter plots to show the relations among iris variables. (a) PW vs. PL; (b) PW vs. SL; (c) PW vs. SW

看,是不是也像模像样! 会批量画3个图,就会批量画上百个图,道理其实是一样的。下一篇教程见!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,230评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,261评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,089评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,542评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,542评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,544评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,922评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,578评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,816评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,576评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,658评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,359评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,920评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,859评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,381评论 2 342

推荐阅读更多精彩内容