前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >ggplot批量画图

ggplot批量画图

原创
作者头像
ruochen
发布2021-12-04 09:57:35
发布2021-12-04 09:57:35
1.6K0
举报

涉及到的知识点如下:

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

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

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

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

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

代码语言:txt
复制
head(iris)  #用head()语句调用一下iris数据集的前几行数据,得到结果如下:
代码语言:txt
复制
 Sepal.Length Sepal.Width Petal.Length Petal.Width Species 
代码语言:txt
复制
1          5.1         3.5          1.4         0.2  setosa
代码语言:txt
复制
2          4.9         3.0          1.4         0.2  setosa
代码语言:txt
复制
3          4.7         3.2          1.3         0.2  setosa
代码语言:txt
复制
4          4.6         3.1          1.5         0.2  setosa
代码语言:txt
复制
5          5.0         3.6          1.4         0.2  setosa
代码语言:txt
复制
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

代码语言:txt
复制
Labels<-NULL
代码语言:txt
复制
for  (j in 1:1:4){
代码语言:txt
复制
   Labels[j] <- paste("Labels", j, sep = "")
代码语言:txt
复制
   assign(Labels[j], NULL)
代码语言:txt
复制
}  #使用for循环,循环定义4个变量 - Labels1, Labels2, Labels3, Labels4
代码语言:txt
复制
assign(Labels[1], expression(italic(SL)~"("*"mm"*")"))
代码语言:txt
复制
assign(Labels[2], expression(italic(SW)~"("*"mm"*")"))
代码语言:txt
复制
assign(Labels[3], expression(italic(PL)~"("*"mm"*")")) 
代码语言:txt
复制
assign(Labels[4], expression(italic(PW)~"("*"mm"*")"))  #分别给4个变量赋值 - 即横坐标的名称以及单位

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

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

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

重申一下,本篇教程解决的问题是 -

以iris数据集中的前3个变量为自变量,第4个变量Petal.Width为因变量,用ggplot批量绘制散点图,并用简单线性回归拟合。

先加载程序需要的安装包

代码语言:txt
复制
library(ggplot2)

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

代码语言:txt
复制
windowsFonts(roman=windowsFont("Times New Roman"))  #图中字体使用新罗马
代码语言:txt
复制
options(scipen=200)  #不使用科学计数法
代码语言:txt
复制
for (i in 1:3){ 
代码语言:txt
复制
p<-ggplot(data =iris, mapping = aes(x=iris[,i], y=iris[,4]))+
代码语言:txt
复制
geom_point(alpha = 0.5,size = 8)+   #alpha控制点的透明度,可以辅助检验重合点
代码语言:txt
复制
geom_smooth(size=3,method=lm,se=FALSE)+
代码语言:txt
复制
xlab(get(paste("Labels",i,sep="")))+  #用get()函数分别调用前三个自变量(Labels1,Labels2,Labels3)的名称以及单位
代码语言:txt
复制
ylab(get(paste("Labels",4,sep="")))+ #用get()函数调用第四个因变量(Labels4)的名称以及单位
代码语言:txt
复制
theme_bw()+ 
代码语言:txt
复制
theme(axis.text.x = element_text(size=30, face = "bold",family = "roman"))+ 
代码语言:txt
复制
theme(axis.text.y = element_text(size=30, face = "bold",family = "roman"))+
代码语言:txt
复制
theme(axis.title.x = element_text(angle = 00, hjust = 0.5, size=50,color="black",family = "roman"))+
代码语言:txt
复制
theme(axis.title.y = element_text(angle = 90,vjust=0.5, hjust = 0.5, size=50, color="black",family = "roman"))
代码语言:txt
复制
#存储批量生成的图片
代码语言:txt
复制
setwd('C:/Users/zhang/Desktop/自媒体/简书/ggplot批量画图/iris')
代码语言:txt
复制
ggsave(filename=paste(colnames(iris[i]),".png",sep=""),plot=p,width =17,height=10) #以自变量的名称为文件名
代码语言:txt
复制
}

用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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
0 条评论
热度
最新
推荐阅读
目录
  • 涉及到的知识点如下:
  • 一. iris鸢尾花数据集的简单介绍:
  • 二. assign()和get()联合使用,存储/调用横纵坐标名称:
  • 三. for 循环中调用ggplot,实现批量绘图:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档