ggplot2-语法突破

本文深入探讨了ggplot2的图形图层语法,它基于Wilkinson的图形语法,允许灵活创建富有表现力的图表。通过学习如何组合基本组件,如几何对象(点、线、条形等)和标度变换,可以轻松制作散点图、箱线图和折线图等。此外,还介绍了统计变换和分面的概念,以构建更复杂的图形,例如添加回归线的散点图和按年份分组的图表。文章强调了每个图形元素的重要性,包括颜色、大小和形状的映射,以及坐标系统的应用。
摘要由CSDN通过智能技术生成

本章主要介绍ggplot2的理论基础:图形图层语法
图形图层语法基于Wilkinson的图形语法,并在此基础上添加了许多新功能,使得图形更有表现力,并能完美嵌入到R环境中

在本章中,将简单学习一些语法组成组件的基本知识,学习如何将它们整合到一起

ggplot2的语法使得图形的重复更新变得简单,每次只需更新一个特征。ggplot2语法的价值在于它从更高的视角审视了图形的构成,它认为图形的每个组件都是可以修改的,为你提供一个关于图像的思考框架

1. 绘制散点图

发动机的尺寸和燃油的关系是怎样的?可以根据数据集创建一个关于发动机耗油量和高速公路每加仑行驶的英里数的箱线图

ggplot(mpg, aes(displ, hwy, color = factor(cyl))) + geom_point()

在这里插入图片描述

1. 图形属性和数据的映射

散点图中,每一个观测值都用一个点来表示,点的位置由两个变量的值决定
每个点不仅有横坐标和纵坐标,还有大小、颜色和形状,这些属性称为图形属性(aesthetics)
每个图形属性都可以映射为一个变量或者设定为一个常数

在散点图中,用点来表示每个观测,倘若用直线连接所有观测,则会得到折线图。如果用条形来表示这些数据,就会得到条形图。不过对于这个数据集而言,折线图和条形图是没有意义的

ggplot(mpg, aes(displ, hwy, color = factor(cyl))) +
	geom_line() + theme(legend.position = "none")
ggplot(mpg, aes(displ, hwy, color = factor(cyl))) +
	geom_bar(stat = "identity", position = "identity", fill = NA) +
	theme(legend.position = "none")

在这里插入图片描述

在这里插入图片描述

在ggplot2中,可以作出很多没有意义但符合语法的图形

点(point)、线(line)和条(bar)都是几何对象的具体形式,被称为geom
几何对象决定了图形的“类型(type)”

只含一种几何对象的图通常有特定的名字

图形名称几何对象(geom)
散点图
气泡图
条形图条形
箱型图箱子
折线图线

更复杂的图形一般没有特定的名称,因而需要一定的描述

下图在散点图的基础上对每个组添加了回归线

ggplot(mpg, aes(displ, hwy, color = factor(cyl))) +
	geom_point() + geom_smooth(method = "lm")

在这里插入图片描述

2. 标度变换

前面表中的数值对于电脑而言没有任何意义,需要把它们从数据单位(如升、英里每加仑和气缸数)转换成电脑可以识别的物理单位(如像素和颜色)
这个转换过程称之为标度变换(scaling)

转换后的数据:颜色用六个字母组成的十六进制字符来表示,大小和形状分别用数字和整数来表示
这些R可以识别的图形属性值可参见vegnette(“ggplot2-specs”)

在这个例子中,有3个图形属性需要进行标度变换:水平位置(x)、竖直位置(y)和颜色(color)
在这个例子中,位置变换非常简单,因为我们用的是默认的线性变换,只需要将数据的范围线性映射到[0, 1]区间上即可
因为ggplot2调用的绘图系统grid包会帮忙处理好最终的转换细节,所以采用的是[0, 1]而不是精确的像素值
最后一步是如何根据点的位置(x和y)来确定它在图中的位置,这是由坐标系统决定的写作coord
大多数情况下,默认使用笛卡尔坐标系,不过有时也会采用极坐标系或用地图中的球投影

颜色可看作由3种组件组成,它们与人眼中识别颜色的3种细胞相对应,这3种细胞建立了一个三维的颜色空间,颜色的标度变换就是将数据的值映射到这个空间中
映射方法有很多,由于此处cyl是分类变量,所以把它等距地映射到色轮上,当变量是连续型时,将使用其它映射方法

点默认使用直径为1毫米的圆圈(R中标号19的形状)来表示

最后,还需要对这些数据进行渲染,生成能在屏幕上展示的图形。绘制一个完整的图形,需要3类图形对象:数据,用点来表示;标度和坐标系,用来生成坐标轴和图例,通过它们才能读出图中蕴含的信息;图形注释,如背景和标题

3. 更复杂的图形示例
ggplot(mpg, aes(displ, hwy)) + geom_point() +
	geom_smooth() + facet_wrap(~year)

在这里插入图片描述

这幅图添加了3种新的组件:分面、多个图层和统计量
分面和图层将原数据切割成多个小数据集,即每个图层的每个分面面板(facet panel)都含一个小数据集
可以将它想象成一个三维矩阵:分面面板形成了一个二维网络,图层在第三维的方向上叠加。本例中所有图层的数据都是一样的,但是一般而言,可以在不同图层里使用不同的数据集

平滑曲线层与散点层的不同点在于它没有展示原数据,而是展示了统计变换后的数据。特别地,平滑曲线层模拟了一条穿过数据中间位置的平滑曲线。添加该图层需要在前面介绍过的流程里面再添加一步:将数据映射到图形属性后,要对其进行统计变换(对数据进行有效的处理),统计变换简写为stat。在本例中,统计变换首先用一条loess平滑曲线来拟合数据,然后在数据的范围内,利用等间隔的点,计算并返回点所对应的预测值
其它有用的统计变换包括1维和2维的封箱(binning),求组平均(group means),分位数回归(quantile regression)和等高线(contour)

因为添加了统计变换,所以在进行标度变换时需要添加额外的步骤
这是因为现在有多个数据集(对不同的分面和图层而言),所以需要确保所有的变换在各个数据集里都是相同的。标度变换实际上出现在三个地方:标度转换(transforming),标度训练(training)和标度映射(mapping)

在双对数图中,数据值不是直接线性映射到图形上的位置,而是先进行了对数变换

  1. 标度转换先于统计变换,因此统计量都是基于标度变换后的数据计算的。这样可以确保log(x)对log(y)在线性尺度上的图与x对y在对数尺度上的图看起来一样。另外,还有其它不同的变换可以使用,包括取平方根、对数和倒数。详见来连续的位置标度

  2. 计算完统计量之后,所有分面和图层的数据集中的每个标度都会被“训练”。标度训练将根据所有小数据集里数据的范围得到整体数据的范围。如果没有这一步,标度将只具有局部意义,当将不同的层叠加在一起时,它们的位置就会错乱。不过有些时候我们也需要得到不同分面间(绝不是图层间)标度有错位的图形,这种情况详见标度控制

  3. 最后,标度映射将数据映射到图形属性中。这是一个局部操作:每个数据集里的变量都映射给相应的图形属性值,生成一个新的数据集后再用几何对象来渲染

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 学习 R 语言ggplot2 语法的方法有很多,下面是一些建议: 1. 首先,可以阅读 ggplot2 官方文档,了解 ggplot2 的基本概念和使用方法。官方文档链接:https://ggplot2.tidyverse.org/ 2. 可以在网上搜索 ggplot2 教程,找到适合自己的学习方式。一些可以参考的资源包括: - R 语言中文社区(https://www.r-project.org.cn/)上的 ggplot2 教程:https://www.r-project.org.cn/document/r-tutor/r-tutor-ggplot2.html - 菜鸟教程(https://www.runoob.com/)上的 ggplot2 教程:https://www.runoob.com/r/r-ggplot2-intro.html - 还有一些博客、论坛等网站上的 ggplot2 教程,如:https://www.cnblogs.com/datageek/p/10840165.html 3. 可以尝试自己动手练习,使用 ggplot2 绘图。一些可以参考的练习题目包括: - 绘制简单的直方图、饼图等 - 绘制多变量数据的散点图、条形图等 - 绘制分组数据的折线图、箱线图等 4. 可以加入一些学习群或论坛,和其他学习者交流学习心得。 希望这些建议能帮助你学习 ggplot2 语法。 ### 回答2: 学习R语言ggplot2语法可以通过以下几个步骤进行: 1. 了解ggplot2的基本概念:ggplot2R语言中用于数据可视化的一个包,它基于“图层”和“映射”的思想进行数据绘图。在开始学习ggplot2之前,先了解它的核心概念和基本原理是非常重要的。 2. 学习ggplot2的基本语法ggplot2语法相对简洁直观,通过使用“+”符号来逐步构建图形。学习ggplot2语法包括了解如何在图层中添加数据、映射、几何对象、标度、分面等元素。 3. 掌握ggplot2的常用函数:ggplot2有许多常用的函数,如qplot()、ggplot()、aes()等。这些函数可以用来创建一个基础图形、设置绘图参数、进行数据映射等。学习这些常用函数能够帮助我们更好地理解和使用ggplot2。 4. 阅读相关文档和示例:ggplot2有丰富的文档和示例,可以从ggplot2官方文档或书籍中找到学习资源。阅读这些文档和示例能够帮助我们更深入地了解ggplot2的各种功能和用法。 5. 练习和实践:学习ggplot2语法最重要的一点是不断练习和实践。通过自己动手编写代码、绘制图形,探索和尝试不同的参数和选项,可以逐渐掌握ggplot2语法和技巧。 总之,学习ggplot2语法需要通过了解基本概念、学习基本语法、掌握常用函数、阅读文档和示例,并进行实践和练习。通过不断的学习和实践,我们可以逐步掌握并熟练运用ggplot2语法,从而能够更好地进行数据可视化。 ### 回答3: 学习R语言ggplot2语法需要按照以下步骤进行: 1. 了解ggplot2的基本概念和原理。ggplot2是一个用于数据可视化的R包,其基于图层(layer)的概念,可以通过逐渐添加图层来构建复杂的图形。理解图层的概念对于学习ggplot2语法非常重要。 2. 学习ggplot2的基本语法ggplot2语法基于“+”符号,通过逐步组合不同的图层和美学映射(aesthetic mappings)来构建图形。掌握基本的语法结构,包括ggplot()函数、aes()函数和geom_*()函数,是学习ggplot2的关键。 3. 阅读官方文档和教程。ggplot2官方文档提供了详细的介绍和示例,可以通过查看文档来学习不同的图层和美学映射的用法。此外,还有许多在线教程和书籍可供参考,例如《ggplot2: Elegant Graphics for Data Analysis》。 4. 练习绘制图形。学习ggplot2最好的方式是进行实践。可以通过使用现有的数据集或者自己创建数据集来练习绘制图形。不断尝试不同的图层和美学映射,探索不同的图形效果和展示方式。 5. 参考其他人的代码和作品。通过查看其他人的ggplot2代码和图形作品,可以学习到更多实际应用的技巧和经验。可以在GitHub上搜索ggplot2相关的项目和资源,也可以参加R语言社区的讨论和交流。 总之,要学习R语言ggplot2语法,需要理解ggplot2的基本概念和语法结构,阅读官方文档和教程,进行实践练习,并参考其他人的代码和作品。通过不断的学习和实践,就可以掌握ggplot2语法,从而能够使用ggplot2创建出美观且富有表达力的数据可视化图形。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值