一、农业科研数据可视化常用图形及用途
1、数据可视化的重要性
通过可视化,我们可以更直观地理解和分析数据的特征和趋势。
2、常用图表类型及其概述
散点图:用于展示两个变量之间的关系,可用于观察数据的分布、趋势和异常值。
折线图:用于展示随时间或其他连续变量变化的趋势,常用于时间序列数据或连续试验结果。
饼图:用于显示不同部分占整体的比例,适用于展示百分比或比例数据。
柱形图:用于比较不同类别之间的数据,适用于展示离散数据或对比不同处理组的结果。
直方图:用于展示数据的分布情况,特别适用于连续数据的分布查看。
箱线图:用于展示数据的分布情况和异常值,可同时显示多个组别的数据比较。
热力图:用于可视化矩阵型数据,通过颜色映射展示变量之间的关系。
3、进阶图形
根据研究的目标和问题,选择最合适的图形来呈现数据,强调研究的重点和关键信息。如:桑基图、环形柱图等。
二、ggplot2绘图原理
1、ggplot2简介
ggplot2是R语言中最受欢迎的数据可视化包。基于图形语法理论,通过简单而一致的语法,使用户能够轻松创建各种复杂的图形。
2、ggplot2的基本原理
图形语法是ggplot2的基本原理,它描述了图形的构建过程和基本组成部分。
图形语法包括以下几个基本要素:
①数据:Data Frame
②映射:Mapping
③几何对象:Geometric Objects
④图形属性:Aesthetic
⑤图层:Layers
(1)数据映射与几何对象
数据映射是将数据中的变量映射到图形的属性上,使得数据能够在图形中得到展示。
ggplot2中使用aes()函数进行数据映射。例如,aes(x="Age",y="Height")将数据集中的Age变量映射到x轴位置,Height变量映射到y轴位置。
图形几何对象指定了数据点在图形中的表示方式。ggplot2提供了多种几何对象,如:
geom_point():散点图
geom_line():折线图
geom_bar():条形图
geom_boxplot():箱线图
geom_histogram():直方图
(2)属性映射和图层叠加
图形属性映射是将数据的变量映射到图形元素的外观上,如颜色、大小、形状等。
ggplot2中,通过在aes()函数中设置图形属性,实现数据的外观设置。例如:aes(color='Species')将数据中的Species变量映射到点的颜色。
图层叠加是将不同图形组合在一起,用于同时展示多组数据或多种图形。
在ggplot2中,使用符号"+"将不同的图层组合在一起。例如,ggplot(data)+geom_point()+geom_line()将散点图和折线图组合在同一张图上。
3、ggplot2的安装与加载
在R语言中,安装ggplot2包可以通过install.packages()函数来完成。
执行该命令后,R会从CRAN(Comprehensive R Archive Network)下载并安装ggplot2包及依赖项。安装完成后,即可使用ggplot2包进行可视化。
# 安装ggplot2可视化包
install.packages("ggplot2")
# 加载ggplot2包
library(ggplot2)
# 安装和加载其他必要的库,流入cowplot用于拼图
install.packages('cowplot')
library(cowplot)
三、创建ggplot2图形
1、创建基本图形框架
ggplot()函数用于创建基本的图形框架。它指定了数据集以及整个图形的坐标系和属性。
# 语法
ggplot(data=<数据集>,mapping=aes(<映射参数>))
# 示例
# 创建基本图形框架
p<-ggplot(data=mydata)
# 创建基本图形框架,并进行数据映射
p<-ggplot(data=mydata,mapping=aes(x=variable,y=value))
# 加载ggplot2包
library(ggplot2)
# 创建基本图形框架,并进行数据映射
# 使用R语言自带的数据集iris
p<-ggplot(data=iris,mapping=aes(x=Sepal.Length,y=Petal.Length))
# 添加几何对象
p + geom_point()
# 使用R语言自带的数据集mtcars
p<-ggplot(data=mtcars,mapping=aes(x=factor(cyl),y=mpg))
# 添加条形几何对象
p+geom_bar(stat="identity")
2、数据映射
aes()函数用于将数据的变量映射到图形的属性上,如x轴位置、y轴位置、颜色、形状等。
它定义了数据映射规则,将数据集中的变量与图形属性进行关联。
# 语法
# 创建基本图形框架,并进行数据映射
p<-ggplot(data=mydata,mapping=aes(...))
# 可以映射的内容
x轴位置、y轴位置、颜色color/填充fill、形状shape、大小size、分组group、标签label等
# 以iris数据集为例,创建散点图,并按颜色区分不同物种
p<-ggplot(data=iris,mapping=aes(
x=Sepal.Length,y=Petal.Length,color=Species
))
# 添加点几何对象
p+geom_point()
# 以iris数据集为例,创建散点图,并按形状区分不同物种
p<-ggplot(data=iris,mapping=aes(
x=Sepal.Length,y=Petal.Length,shape=Species
))
# 添加点几何对象,并设置点大小
p+geom_point()
如果同时设置shape=Species,color=Species,则会出现下图效果,大家可以自行尝试:
3、几何对象
在ggplot2中,几何对象是用于表示数据的可视化元素,如点、线、条形等。通过添加不同的几何对象,我们可以创建各种类型的图形。
# 以R语言自带的economics数据集为例,进行折线图绘制
p<-ggplot(data=economics,mapping=aes(
x=date,y=unemploy
))
# 添加线几何对象
p+geom_line()
# 创建柱形图
# 创建基础图形框架,并进行数据映射
p<-ggplot(data=mpg,aes(x=class))
# 添加条形几何对象
p+geom_bar()
四、图形属性设置
1、文本标签、标题和图例
通过在图形中添加文本标签,我们可以向观众提供更多的信息,例如数据点的数据值、类别的标识等。
# 添加文本标签
# 创建基本图形框架,并进行数据映射
p<-ggplot(data=iris,mapping=aes(
x=Sepal.Length,y=Sepal.Width
))
# 添加点几何对象,并设置点标签
p+geom_point(size=3)+geom_text(aes(label=Species))
通过添加标题,能够帮助观众理解图形的含义和信息。
# 添加图像标题
# 创建基本图形框架,并进行数据映射
p<-ggplot(data=iris,mapping=aes(
x=Sepal.Length,y=Sepal.Width
))
# 添加点几何对象,并设置点的大小
p+geom_point(size=3)+labs(
title="鸢尾花花萼长度与花萼宽度",
x="花萼长度",
y="花萼宽度"
)
2、图层叠加
图层叠加是指将不同的几何对象叠加在同一个图形中,以展示多个变量或数据的关系。通过叠加多个图层,我们可以同时呈现多个数据特征,提供更全面的视觉表达。
# 加载ggplot2包
library(ggplot2)
# 创建基本图形框架,并进行数据映射
p<-ggplot(data=iris,mapping=aes(
x=Sepal.Length, y=Sepal.Width
))
# 添加散点图图层
scatter_layer<-geom_point(aes(color=Species),size=3)
# 添加箱线图图层
boxplot_layer<-geom_boxplot(aes(color=Species),outlier.shape=NA)
# 图层叠加
p+scatter_layer+boxplot_layer
# 创建基本图形框架,并进行数据映射
p<-ggplot(data=iris,mapping=aes(
x=Sepal.Length, y=Sepal.Width,color=Species
))
# 添加散点图图层
scatter_layer<-geom_point(size=3)
# 添加回归线图层
lm_layer<-geom_smooth(method='lm',se=FALSE)
# 图层叠加
p+scatter_layer+lm_layer
五、图形主题绘制
1、字体、颜色、样式
在ggplot2中,可以通过修改图形主题来调整字体、颜色和样式等元素。这样可以使图形更具有个性和可读性。
(1)修改字体
# 创建图形并修改字体
p<-ggplot(data=iris,aes(x=Sepal.Length,y=Sepal.Width,color=Species))
p+geom_point()+labs(
title="Iris Data",x="Length",y="Width",color="Species"
)+theme(
text=element_text(family="Arial")
)
(2)修改颜色
可以使用颜色名称或十六进制代码来修改图形中的颜色。可以通过修改axis.line、panel.grid.minor等参数来调整坐标轴、背景和网格线的颜色。
# 创建图形并修改颜色
p<-ggplot(data=mpg,
aes(x=displ,y=hwy))
p+geom_point()+labs(
title="汽车燃油效率",x="排量",y="公里数"
)+theme(
axis.line=element_line(color='blue',size=1),
panel.background=element_rect(fill='#F2F2F2'),
panel.grid.major=element_line(color='gray',linetype='dashed'),
panel.grid.minor=element_blank()
)
(3)修改样式
可以使用element_rect()函数和element_line()函数来修改图形中的矩形和线段样式。可通过修改panel.border、legend.key等参数来调整图形元素的样式。
# 创建图形并修改样式
p<-ggplot(data=diamonds,aes(x=carat,y=price))
p+geom_point()+labs(
title="钻石间隔与克拉数关系",x="克拉数",y="加个"
)+theme(
panel.border=element_rect(color='black',fill=NA),
legend.background = element_rect(fill="gray90"),
legend.key = element_rect(fill='white',color='black')
)
2、网格线和背景设置
(1)调整网格线
可以使用theme()函数中的panel.grid.major和panel.grid.minor参数来调整网格线的样式。可修改网格线的颜色、线型、粗细等。
# 创建图形并调整网格线
p<-ggplot(data=diamonds,aes(x=carat,y=price))
p+geom_point()+labs(
title="钻石价格与克拉数关系",x="克拉数",y="价格"
)+theme(
panel.grid.major=element_line(color='gray',linetype = "dashed"),
panel.grid.minor=element_blank()
)
(2)调整背景
可以使用theme()函数中的panel.background参数来调整图形的背景颜色和填充。可以使用element_rect()函数来指定填充颜色、边框颜色和大小。
# 创建图形并调整背景
p<-ggplot(data=iris,mapping=aes(
x=Sepal.Length,y=Sepal.Width,color=Species
))
p+geom_point()+labs(
title = "鸢尾花数据",
x="花萼长度",
y="花萼宽度",
color="品种"
)+theme(
panel.background = element_rect(fill='gray90'),
panel.border=element_rect(color='black',fill=NA)
)
3、自定义主题
使用theme()函数可以设置图形的整体主题。可以通过修改各种参数来调整图形的背景、边框、网格线、标题等样式。
# 设置图形主题
my_theme<-theme(
plot.title = element_text(size=16,face='bold'),
axis.title = element_text(size=12),
axis.text = element_text(size=10),
legend.title = element_text(size=10),
legend.text = element_text(size=8),
panel.background = element_rect(fill='white'),
panel.grid.major = element_line(color='gray',linetype='dashed'),
panel.grid.minor = element_blank(),
panel.border = element_rect(color='black',fill=NA)
)
# 创建图形并应用自定义主题
p<-ggplot(data=iris,mapping = aes(
x=Sepal.Length,y=Sepal.Width,color=Species
))
p+geom_point()+labs(
title = "鸢尾花数据",x="花萼长度",y="花萼宽度",color="品种"
)+my_theme
六、分面绘图
1、facet_wrap分面绘图
facet_wrap函数能够根据单一分类变量将数据分成多个子图,并在每个子图中绘制对应组别的数据。子图的排列方式默认为等高等宽,可以通过nrow和ncol参数来调整子图的行数和列数。
# 导入ggplot2包
library(ggplot2)
# 使用facet_wrap函数创建分面绘图
p<-ggplot(data=mpg,mapping=aes(x=displ,y=hwy))
p+geom_point()+facet_wrap(~class,nrow=2)+labs(
title="汽车燃油效率",
x="排量",
y="公路里程"
)
# 示例2
p<-ggplot(data=iris,aes(x=Sepal.Length,y=Sepal.Width))
p+geom_point()+facet_wrap(~Species)+labs(
title="鸢尾花数据集",
x="花萼长度",
y="花萼宽度"
)
# 示例3
p<-ggplot(data=diamonds,aes(x=cut,y=price))
p+geom_boxplot()+facet_wrap(~color,nrow = 2)+labs(
title = "钻石价格与切割质量关系",
x="钻石切割质量",
y="钻石价格"
)
2、facet_grid分面绘图
facet_grid函数能够根据两个或多个分类变量将数据分成多个子图,并在每个子图中绘制对应组别的数据。
语法:facet_grid(分类变量1~分类变量2,nrow=函数,ncol=列数)
# 使用facet_grid()函数创建分面绘图
p<-ggplot(data=mpg,aes(x=displ,y=hwy))
p+geom_point()+facet_grid(drv~class)+labs(
title="汽车燃油效率",
x="排量",
y="公路里程"
)
# 示例2
p<-ggplot(data=diamonds,mapping = aes(x=cut,y=price))
p+geom_bar(stat="identity")+facet_grid(cut~color)+labs(
title="钻石价格与切割质量关系",
x="钻石切割质量",
y="钻石价格"
)
# 示例3
p<-ggplot(data=iris,aes(x=Petal.Width,y=Petal.Length))
p+geom_point()+facet_grid(Species~.)+labs(
title="鸢尾花数据集",
x="花瓣宽度",
y="花瓣长度"
)
七、图片拼接与保存
1、多图拼接方法
在ggplot2中,需要借助gridExtra包、patchwork包等辅助包来实现不同类型图形的整齐拼接。
grid.arrange()函数来自于gridExtra包,用于将多个ggplot2图形按照指定的排列方式拼接在一起。语法如下:
grid.arrange(plot1,plot2,...,ncol=列数,nrow=行数)
plot1,plot2,...指要拼接的ggplot2图形对象。
ncol:指定每行的图形列数。
nrow:指定每列的图形行数。
# 加载ggplot2包和gridExtra包
library(ggplot2)
library(gridExtra)
# 创建两个ggplot2图形对象
p1<-ggplot(data=iris,aes(x=Sepal.Length,y=Sepal.Width,color=Species))+geom_point()
p2<-ggplot(data=diamonds,aes(x=cut,fill=color))+geom_bar()
# 使用grid.arrange()函数图形
grid.arrange(p1,p2,ncol=2)
patchwork包可以让我们更简单地将多个ggplot2图形组合在一起,通过使用“+”符号来实现图形的拼接。语法:
plot1+plot2+...+plotN
# 导入ggplot2包和patchwork包
library(ggplot2)
library(patchwork)
# 创建两个ggplot2图形对象
p1<-ggplot(data=iris,aes(x=Sepal.Length,y=Sepal.Width,color=Species))+geom_point()
p2<-ggplot(data=diamonds,aes(x=cut,fill=color))+geom_bar()
# 使用patchwork包拼接图形
p1+p2
图形效果与上图一致,不再重复展示。
2、图形高清保存
在ggplot2中,我们可以使用ggsave()函数来保存ggplot2绘制的图形为高清图像文件。ggsave()函数是ggplot2包提供的图形保存函数。语法如下:
ggsave(filename, plot, device=NULL, path=NULL, scale=1, width=NA, height=NA, units=c("in", "cm", "mm"), dpi=300)
# 创建一个简单的ggplot2图形
p<-ggplot(data=iris,aes(x=Sepal.Length,y=Sepal.Width,color=Species))+geom_point()
# 保存图形为png格式文件,分辨率为300dpi
# 图片将保存在当前工作目录中
ggsave(filename="scatter_plot.png",plot=p,dpi=300)