《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)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

网络安全之CSRFSSRF漏洞(上篇)(技术进阶)

目录 一&#xff0c;CSRF篇 二&#xff0c;认识什么是CSRF 三&#xff0c;实现CSRF攻击的前提 四&#xff0c;实战演练 【1】案例1 【2】案例2 【3】案例3 【4】案例4&#xff08;metinfo&#xff09; 一&#xff0c;CSRF篇 二&#xff0c;认识什么是CSRF CSRF&#x…

YesPMP众包平台最新项目

YesPMP一站式互联网众包平台&#xff0c;最新外包项目&#xff0c;有感兴趣的用户可进入平台参与竞标。 &#xff08;竞标后由项目方直接与服务商联系&#xff0c;双方直接对接&#xff09; 1.查看项目&#xff1a;个人技术-YesPMP平台 2.查看项目&#xff1…

【003_音频开发_基础篇_Linux进程通信(20种你了解几种?)】

003_音频开发_基础篇_Linux进程通信&#xff08;20种你了解几种&#xff1f;) 文章目录 003_音频开发_基础篇_Linux进程通信&#xff08;20种你了解几种&#xff1f;)创作背景Linux 进程通信类型fork() 函数fork() 输出 2 次fork() 输出 8 次fork() 返回值fork() 创建子进程 方…

zkVM选型要点

1. 引言 当选择ZK工具&#xff0c;来做可验证链下计算来扩容区块链时&#xff0c;需考虑&#xff1a; 1&#xff09;为何应选择zkVM&#xff1f;2&#xff09;zkVM有哪些基本功能&#xff1f;3&#xff09;哪些zkVM可提供这些基本功能&#xff1f; 2. 为何应选择zkVM&#x…

OpenCV——图像分块局部阈值二值化

目录 一、算法原理1、算法概述2、参考文献 二、代码实现三、结果展示 OpenCV——图像分块局部阈值二值化由CSDN点云侠原创&#xff0c;爬虫自重。如果你不是在点云侠的博客中看到该文章&#xff0c;那么此处便是不要脸的爬虫。 一、算法原理 1、算法概述 针对目前局部阈值二值…

消息队列 Kafka 入门篇(二) -- 安装启动与可视化工具

一、Windows 10 环境安装 1、下载与解压 首先&#xff0c;访问Apache Kafka的官方下载地址&#xff1a; https://kafka.apache.org/downloads 在本教程中&#xff0c;我们将使用kafka_2.13-2.8.1版本作为示例。下载完成后&#xff0c;解压到您的工作目录的合适位置&#xff…

目标检测——YOLOv6算法解读

论文&#xff1a;YOLOv6: A Single-Stage Object Detection Framework for Industrial Applications (2022.9.7) 作者&#xff1a;Chuyi Li, Lulu Li, Hongliang Jiang, Kaiheng Weng, Yifei Geng, Liang Li, Zaidan Ke, Qingyuan Li, Meng Cheng, Weiqiang Nie, Yiduo Li, Bo …

企业商业活动如何获得央级媒体的采访报道?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 企业想要获得央级媒体的采访报道&#xff0c;确实需要精心策划和准备&#xff1a; 一、如何巧妙给媒体报选题 精准定位&#xff1a;首先要明确企业的核心价值、创新点或行业影响力&…

【C++】手撕list(list的模拟实现)

目录 01.节点 02.迭代器 迭代器运算符重载 03.list类 &#xff08;1&#xff09;构造与析构 &#xff08;2&#xff09;迭代器相关 &#xff08;3&#xff09;容量相关 &#xff08;4&#xff09;访问操作 &#xff08;5&#xff09;插入删除 我们在学习数据结构的时候…

StartAI智能绘图软件出现“缺少Python运行库”怎么办?

StartAI做为一款国产AI界的新秀&#xff0c;是一款贴合AIGC新手的智能绘图软件。新手安装遇见“缺少Python运行库”怎么办”&#xff1f;小编一招搞定~ 解决方法&#xff1a;手动下载【resource文件】&#xff0c;将文件添加到安装目录下。 点击链接进行手动下载噢~ 确保 Star…

图像处理之模板匹配(C++)

图像处理之模板匹配&#xff08;C&#xff09; 文章目录 图像处理之模板匹配&#xff08;C&#xff09;前言一、基于灰度的模板匹配1.原理2.代码实现3.结果展示 总结 前言 模板匹配的算法包括基于灰度的匹配、基于特征的匹配、基于组件的匹配、基于相关性的匹配以及局部变形匹…

Spring-IOC之组件扫描

版本 Spring Framework 6.0.9​ 1. 前言 通过自动扫描&#xff0c;Spring 会自动从扫描指定的包及其子包下的所有类&#xff0c;并根据类上的特定注解将该类装配到容器中&#xff0c;而无需在 XML 配置文件或 Java 配置类中逐一声明每一个 Bean。 支持的注解 Spring 支持一系…

Mysql索引详解(索引分类)

文章目录 概述索引对查询速度的影响索引的优缺点索引类型一级索引和二级索引的区别MySQL 回表联合索引&#xff08;最左前缀原则主键索引和唯一索引的区别BTree索引和Hash索引的区别 覆盖索引索引下推加索引能够提升查询效率原因MySQL 索引结构采用 B树原因索引失效的场景MySQL…

JAVASE基础语法(异常、常用类)

一、异常 1.1 什么是异常 异常就是指不正常。是指代码在运行过程中可能发生错误&#xff0c;导致程序无法正常运行。 package com.atguigu.exception;public class TestException {public static void main(String[] args) {int[] arr {1,2,3,4,5};System.out.println(&quo…

前端css中filter(滤镜)的使用

前端css中filter的使用 一、前言二、补充内容说明三、模糊&#xff08;一&#xff09;、模糊效果&#xff0c;源码1&#xff08;二&#xff09;、源码1运行效果1.视频演示2.截图演示 四、阴影&#xff08;一&#xff09;、阴影效果&#xff0c;源码2&#xff08;二&#xff09;…

Linux文件系统与日志

一、inode和block 文件数据包括元信息与实际数据&#xff0c;文件存储在硬盘上&#xff0c;硬盘最小存储单位是扇区&#xff0c;每个扇区存储512字节 1.block(块)&#xff1a;文件系统中用于存储文件实际数据的最小单位&#xff0c;由文件系统进行分配和管理&#xff0c;并通…

JavaSE内部类

内部类概述 1.内部类的基础 内部类的分类&#xff1a;实例化内部类&#xff0c;静态内部类&#xff0c;局部内部类和匿名内部类 public class OutClass {// 成员位置定义&#xff1a;未被static修饰 --->实例内部类public class InnerClass1{}// 成员位置定义&#xff1a;被…

01、创建型-单例模式--只有一个实例

文章目录 前言一、基本介绍1.1 什么是单例模式1.2 为什么要用单例模式1.3 应用场景1.4 单例优缺点 二、单例模式的实现方式2.1 饿汉式单例2.1.1 静态变量方式2.1.2 静态代码块 2.2 懒汉式单例2.2.1 懒汉式单例2.2.2 懒汉式优化①-线程安全2.2.2 懒汉式优化②-双重检查锁2.2.3 懒…

ROS1快速入门学习笔记 - 04创建工作环境与功能包

一、定义 工作空间(workspace)是一个存放工程开发相关文件的文件夹。 src:代码空间&#xff08;Source Space&#xff09;build: 编辑空间&#xff08;Build Space&#xff09;devel:开发空间&#xff08;Development Space&#xff09;install:安装空间&#xff08;Install …

深入理解Linux文件系统于日志分析

目录 一.Inode 和 block 概述 ​编辑 1.inode 的内容 &#xff08;1&#xff09;Inode 包含文件的元信息 &#xff08;2&#xff09;用 stat 命令可以查看某个文件的 inode 信息 &#xff08;3&#xff09; Linux系统文件三个主要的时间属性 &#xff08;4&#xff09;目…