R语言——ggplot2的绘图逻辑

本文深入介绍了R语言中ggplot2包的使用,包括数据初始化、几何对象、统计变换、标尺设置、坐标系转换和分面等功能。通过对比plot函数,展示了ggplot2在图形绘制的灵活性和层次感。以iris数据集为例,详细解释了如何创建散点图、条形图,并探讨了分面网格(facet_grid)和包裹(facet_wrap)的用法,最后讨论了如何保存图形。文章旨在揭示ggplot2的强大绘图逻辑,帮助读者更好地理解和运用这一工具。

前言

在R语言里,谈及绘图ggplot2是最出名的绘图包之一,作为一个绘图神器,它提供了许许多多的功能给用户使用,仅用短短几行代码,一幅幅高端大气的图像便跃然纸上,这可能就是ggplot2包的魅力所在。
我刚开始学习ggplot2的时候只用于学术上的制图,对深层的制图一知半解,趁着有空便重新学习了一下ggplot2包,才发现其背后的制图逻辑竟跟GIS的图层叠加有着高度的相似,下面就是我学到的内容了。

数据集介绍

这次使用的数据集是R包内置的iris数据集,是由Edgar Anderson记录的3种鸢尾花形态数据。
iris以鸢尾花的特征作为数据来源,常用在分类操作中。该数据集由3种不同类型的鸢尾花的各50个样本数据构成。其中的一个种类与另外两个种类是线性可分离的,后两个种类是非线性可分离的。

该数据集包含了4个属性:

Sepal.Length(花萼长度),单位是cm;
Sepal.Width(花萼宽度),单位是cm;
Petal.Length(花瓣长度),单位是cm;
Petal.Width(花瓣宽度),单位是cm;
Species(种类):Iris Setosa(山鸢尾)、Iris Versicolour(杂色鸢尾),以及Iris Virginica(维吉尼亚鸢尾)。

在这里插入图片描述

polt与ggplot对比

我们用相同的数据,通过plot函数跟ggplot函数分别绘制散点图来简单理解一下两者的差异:

library("ggplot2")    #加载安装好的ggplot2包
plot(iris$Sepal.Length, iris$Sepal.Width) #plot绘图
ggplot(data = iris,aes(x = Sepal.Length,    #ggplot2绘图
                         y=Sepal.Width))+        #绘制底层画布
                         geom_point(color = "darkred")    #在画布上添加点

plot函数散点图
上图为plot函数散点图,下图为ggplot函数散点图ggplot函数散点图
从上述代码可以看出,ggplot绘图有以下两个特点

  1. 有明确的开始(以ggplot函数开始)与终止(一条语句一幅画)
  2. ggplot2语句可以理解成一条语句一幅画,然后通过图层叠加,叠加通过“+”号将绘图的语句连接起来。

ggplot2绘图

绘制画布

上面介绍的ggplot2绘图有明确的开始,即以ggplot函数作为开始的标志,那么ggplot()有什么用呢?
它的主要功能在于初始化一个ggplot对象,且不指定绘图内容,格式如下:

ggplot(data = NULL, mapping = aes(), ...,environment = parent.frame())

其中,data指的要绘图的数据集,它会被制定为绘图环境,载入之后就不需要写大量的$符号来提取data.frame里面的向量的操作。如果数据都是向量,那么也可不指定,但要在声明中标注data=NULL,否则会有不必要的报错。
数据与图形属性之间的映射关系称mapping。
ggplot对象的data存储了整个属性框的内容,而mapping则确定如何使用这些数据。图形的可视属性包括如形状、颜色、透明度等美学属性,确定美学属性与数据之间的对应关系一般用aes函数。常见的图形属性包括x、y、size、color、group.

比如,当data=iris时,mapping= aes(x = Sepal.Length, y = Sepal.Width)表示将花萼长度作为x轴变量,将花萼宽度作为y轴变量。如果需要将Species映射到形状或者颜色属性,可以添加shape=Species或者colour = Species. 使用ggplot函数绘制底层画布。

ggplot(data = iris, aes(x = Sepal.Length,
                             y = Sepal.Width,
                             colour = Species,
                             shape = Species))

在这里插入图片描述
除了

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值