《R语言与农业数据统计分析及建模》学习——ggplot2绘图基础

一、农业科研数据可视化常用图形及用途

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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2980737.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

[SWPUCTF 2022 新生赛]1z_unserialize

function __destruct()这是类的析构函数。在 PHP 中&#xff0c;析构函数会在对象被销毁时自动调用。 $a($this->lly): 将 $this->lly 的值作为参数传递给 $a 所代表的函数。 由题目可知&#xff0c;实现nss反序列化的同时&#xff0c;会触发__destruct()的魔术方法将l…

【数据结构(邓俊辉)学习笔记】向量03——常规向量

文章目录 0.概述1.元素访问2.置乱器3.判等器与比较器4.无序查找4.1 判等器4.2 顺序查找4.3 实现4.4 复杂度 5. 插入5.1 算法实现5.2 复杂度分析 6. 删除6.1 区间删除6.2 单元删除6.3 复杂度 7. 唯一化7.1 实现7.2 正确性7.3 复杂度 8. 遍历8.1 实现8.2 复杂度 9. 总结 0.概述 …

【树莓派学习】开发环境配置

【树莓派学习】开发环境配置 ​ Raspberry Pi OS作为基于Linux的系统&#xff0c;其默认网络配置在国内的网络环境下容易出现访问慢甚至无法连接等问题&#xff0c;不便于我们的学习&#xff0c;同时&#xff0c;树莓派上C/C的使用需要单独安装WiringPi。本文主要介绍如何更改…

探索开源的容器引擎--------------Docker容器操作

目录 一、Docker 容器操作 1.1容器创建 1.2查看容器的运行状态 1.3启动容器 1.4创建并启动容器 1.4.1当利用 docker run 来创建容器时&#xff0c; Docker 在后台的标准运行过程是&#xff1a; 1.4.2在后台持续运行 docker run 创建的容器 1.4.3创建容器并持续运行容器…

PYTHON用[邻接列表]及[邻接矩阵]来存储无向图

# 图可以根据边的性质进行分类&#xff1a;# 有向图&#xff08;Directed Graph&#xff09;&#xff1a;在有向图中&#xff0c;边是有方向性的&#xff0c;从一个节点指向另一个节点。这意味着从节点 A 到节点 B 的边与从节点 B 到节点 A 的边可以是不同的&#xff0c;或者根…

parallels desktop19出来了吗?2024最新版本有哪些新功能

Parallels Desktop 19已经发布。以下是关于Parallels Desktop 19的相关信息&#xff1a; 发布时间&#xff1a;Parallels Desktop 19是在近期发布的一款虚拟机软件&#xff0c;具体发布时间为2023年下半年。 功能特点&#xff1a; 针对搭载苹果芯片的Mac进行了优化&#xff0c…

微信小程序webview和小程序通讯

1.背景介绍 1.1需要在小程序嵌入vr页面&#xff0c;同时在vr页面添加操作按钮与小程序进行通信交互 1.2 开发工具&#xff1a;uniapp开发小程序 1.3原型图 功能&#xff1a;.点击体验官带看跳转小程序的体验官带看页面 功能&#xff1a;点击立即咨询唤起小程序弹窗打电话 2.…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单人脸检测/识别实战案例 之五 简单进行车牌检测和识别 一、简单介绍 二、简单进行车牌检测和识别实现原理 …

Jmeter之Beanshell详解

一、 Beanshell概念 Beanshell: BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;BeanShell是一种松散类型的脚本语言(这点和JS类似);BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性…

[Algorithm][前缀和][模板 一维前缀和][模板 二维前缀和][寻找数组中心下标][除自身以外数组的乘积] + 前缀和原理 + 前缀和模板

目录 0.原理讲解1.[模板]一维前缀和1.题目链接2.模板代码实现 2.[模板]二维前缀和1.题目链接2.算法原理讲解3.模板代码实现 3.寻找数组的中心下标1.题目链接2.算法原理详解3.代码实现 4.除自身以外数组的乘积1.题目链接2.算法原理详解3.代码实现 0.原理讲解 前缀和&#xff1a;…

Esp8266 - USB开关分享(开源)

文章目录 简介推广自己gitee项目地址:嘉立创项目地址&#xff1a;联系我们 功能演示视频原理图嘉立创PCB开源地址原理图PCB预览 固件烧录代码编译烧录1. 软件和驱动安装2. 代码编译1. 安装所需要的依赖库文件2. 下载源代码3. 烧录代码 使用说明1. 设备配网2. 打开设备操作页面3…

【深度学习】YOLOv5,烟雾和火焰,目标检测,防火检测,森林火焰检测

文章目录 数据收集和数据标注查看标注好的数据的脚本下载yolov5创建 dataset.yaml训练参数开始训练yolov5n训练训练后的权重下载gradio部署 数据收集和数据标注 搜集数据集2w张。 pip install labelme labelme 然后标注矩形框和类别。 下载数据请看这里&#xff1a; https:…

【SpringCloud】Consul-服务注册中心及配置中心快速入门

【SpringCloud】Consul-服务注册中心及配置中心快速入门 文章目录 【SpringCloud】Consul-服务注册中心及配置中心快速入门1. 下载安装及启动2. 服务注册2.1 引入依赖2.2 yml配置2.3 启动类配置2.4 测试 3. 服务配置3.1 引入依赖3.2 yml配置3.3 创建配置文件3.4 动态刷新配置3.…

2024深圳杯(东三省)数学建模挑战赛D题:音板的振动模态分析与参数识别思路代码成品论文分析

​ 更新完整代码和成品完整论文 《2024深圳杯&东三省数学建模思路代码成品论文》↓↓↓ https://www.yuque.com/u42168770/qv6z0d/zx70edxvbv7rheu7?singleDoc# 问题重述 深圳杯&#xff08;东三省&#xff09;数学建模挑战赛2024D题&#xff1a;音板的振动模态分析与…

Docker常用命令(镜像、容器、网络)

一、镜像 1.1 存出镜像 将镜像保存成为本地文件 格式&#xff1a;docker save -o 存储文件名 存储的镜像docker save -o nginx nginx:latest 1.2 载入镜像 将镜像文件导入到镜像库中 格式&#xff1a;docker load < 存出的文件或docker load -i 存出的文件…

WordPress自动采集发布AutoPostPro汉化版插件

WP-AutoPostPro 是一款极为出色的WordPress自动采集发布插件&#xff0c;其显著优势在于能够从任何网站抓取内容并自动将其发布到你的WordPress网站上。它实现了对任何网页内容的自动采集和发布&#xff0c;整个采集过程完全自动化&#xff0c;无需手动操作。 项 目 地 址 &…

Docker学习(二十五)构建 Arthas 基础镜像

目录 一、简介二、构建基础镜像2.1 下载 Arthas2.2 编写 Dockerfile2.3 构建镜像2.4 创建容器2.5 测试 一、简介 Arthas 是一款由 阿里巴巴 开发的 线上监控诊断工具。通过全局视角实时查看应用负载、内存、GC、线程等信息&#xff0c;能在不修改代码的情况下&#xff0c;对业…

【结构型模型】享元模式

一、享元模式概述 享元模式定义&#xff1a;又叫蝇量模式&#xff0c;运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象&#xff0c;而这些对象都很相似&#xff0c;状态变化很小&#xff0c;可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细…

Microsoft SPY++ 使用教程及实操

Spy介绍 Spy (SPYXX.EXE) 是一个基于 Win32 的实用工具&#xff0c;提供系统进程、线程、窗口和窗口消息的图形视图。 Spy 有两个版本 第一个版本&#xff0c;名为 Spy (spyxx.exe)&#xff0c;用于显示发送到在 32 位进程中运行的窗口的消息。 例如&#xff0c;在 32 位进程…

立即刷新导致请求的response没有来得及加载造成的this request has no response data available

1、前端递归调用后端接口 const startProgress () > {timer.value setInterval(() > {if (progress.value < 100) {time.value--;progress.value Math.ceil(100 / wait_time.value);} else {clearInterval(timer.value);progress.value 0;timer.value null;time.…