《ggplot2数据分析与图形艺术》学习笔记 -- 第三章

第三章 语法突破

本章代码

本章讲了一些原理性的东西,看不懂也没关系,不影响使用。只挑了关键的内容摘抄。

3.1简介

本章介绍更多关于ggplot2更多的语法。

主要介绍ggplot2的理论基础:图形图层语法。

本章首先详述了绘制简单图形的过程。然后,3.3 节介绍了简单散点图的绘制方法,3.4节在此基础上又添加了光滑曲线和分面。在学习这些例子的同时,六种语法组件也会被先后提及。随后3.5节对它们作了更为精确的定义。最后,本章以3.6节作结,介绍了怎样将这些图形组件映射成R的数据结构。

3.2 油耗量数据

ggplot2里的mpg数据集,记录了车辆的厂商、型号、类别、引擎大小、传动系统和耗油量等信息。

该数据集隐含了许多有趣的问题。引擎大小和耗油量有什么关系?是不是某些制造商比其他的制造商更关注汽车的耗油量?耗油量在过去的十年中有没有明显的增加?我们将尝试回答第-一个问题, 并在此过程中学习更多关于绘制
散点图的细节。

3.3 绘制散点图

观察图3.1,它是对上面问题的一一个简单回答。这是-一个含有两个连续型变量的散点图(发动机排量(engine displacement)和高速公路每加仑行驶的英里数(highway mpg)),图中点的颜色是由第三个变量(汽缸(cylinders) 的数目)决定的。利用以前章节里学的知识,你应该知道如何使用qplot()来作这幅图。但.是这背后的具体原理是怎样的呢? ggplot2 是怎样作出这幅图的呢?qplot(displ, hwy, data = mpg, colour = factor(cy1))

library("ggplot2")

p <- qplot(displ, hwy, data = mpg, colour = factor(cyl))
ggsave(file = "test.png", plot = p, width = 4, height = 3)

3.3.1 图形属性与数据映射

图形属性包括size、color、shape、position、不透明度等等等,学过PS的肯定都了解。

数据映射就是将我们的数据映射到图层属性上去,如上例中,图形类型默认为point,大小也是默认值,变量displ映射到点的水平位置,变量hwy映射到点的竖直位置,变量cyl映射到点的颜色。由此就可以将我恩的数据可视化为一个图形。

3.3.2 标度变换

就是指值映射这一过程,将原始数据中的变量或常量转化为图形属性的过程。

3.4 更复杂的图形示例

下面的示例添加了三种新的组件:分面、多个图层和统计量。

p <- qplot(displ, hwy, data = mpg, facets = .~year)
p = p + geom_smooth()
ggsave(file = "test.png", plot = p, width = 8, height = 4)

有的变换在各个数据集里都是相同的。标度变换实际上出现在三个地方:标度转换(transforming), 标度训练(training) 和标度映射(mapping)。我们之前还没有提到过变换,但是你可能已经在双对数(log-log) 图中看到过了。在双对数图中,数据值不是线性映射到图形上的位置,而是先进行了对数变换。

  • 标度转换先于统计变换,因此统计量都是基于标度变换后的数据计算的。
    这样可以确保log(x)对log(y)在线性尺度上的图与x对y在对数尺度上
    的图看起来- -样。另外,还有其他不同的变换可以使用,包括取平方根、
    对数和倒数。详见6.4.2节;
  • 计算完统计量之后,所有分面和图层的数据集中的每个标度都会被“训
    练”。标度训练将根据所有小数据集里数据的范围得到整体数据的范围。
    如果没有这一步,标度将只具有局部意义,当将不同的层叠加到- -起时,
    它们的位置就会错乱。不过有些时候我们也需要得到不同分面间(绝不是
    图层间)标度有错位的图形,这种情况详见7.2.3 节;
  • 最后,标度映射将数据映射到图形属性中。这是-一个局部操作:每个数据
    集里的变量都映射给相应的图形属性值,生成一个新的数据集后再用几何对象来渲染。

3.5 图层语法的组件

3.5.1图层

图层的作用是生成在图像上可以被人感知的对象。一个图层由4部分组成:

  • 数据和图形属性映射;
  • 一种统计变换;
  • 一种几何对象;
  • 一种位置调整方式。

图层的属性将在第4章介绍,而第5章则介绍应用它们进行数据可视化的方法。

3.5.2标度

标度控制数据到图形属性的映射,并且图形上所用的每一-个图形属性都对应着一个标度。每个标度都作用于图形中的所有数据,以确保从数据到图形属.性映射的一致性。一些标度如图3.8所示。

一个标度就是一个含有一组参数的函数,它的逆也是如此。例如颜色梯度标度,它把--条实线的各部分映射成--条含不同颜色的路径。函数中的参数可规定该路径是直线还是曲线,决定选择哪个颜色空间(例如,LUV还是RGB)、起始和终止位置的颜色。

其逆函数被用来绘制参照对象,通过参照对象你才能读出图里隐含的信息。参照对象可以是坐标轴(位置标度)或者是图例(其他标度)。大多数的映射都有唯一-的逆函数(也就是一-对一映射),但有些不是。逆映射的唯-性使得复原数据成为可能,但当我们只关注某个方面时,我们不会很在意它是不是一映射。

3.6 绘图方式

绘图有两种方式: 一种是“-一步到位”式,即利用前面学过的qplot();另一种是“逐层叠加”式,即利用ggplot()函数和图层函数逐步作图,细节请见第4章(实际运用多用此方法)。当我们得到一个图形对象时,可以对它进行如下处理:

  • 用print()函数将其呈现到屏幕上。在交互式操作时print() 会自动被调用,但是在循环或函数里,我们需要手动输人print();
  • 用ggsave()函数将其保存到磁盘,详见8.3节;
  • 用summary()简单查看它的结构;
  • 用save()函数把它的缓存副本保存到磁盘;这样可以保存-一个图形对象的完整副本,你可以调用load()函数来重现该图。注意数据是储存在图形对象里的,所以如果你在图形对象外修改数据,然后重新读人已保存的图形对象,图像将不会更新。
p <- qplot(displ, hwy, data = mpg, facets = .~year)
p <- p + geom_smooth()

# save to a "png" image
ggsave(file = "test.png", plot = p, width = 8, height = 4)
# print to interactive panel
print(p)
# save to a R data which can be load again
save(p, file = "test1.RData")
# load the saved R data
load("test1.RData")
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,539评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,594评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,871评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,963评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,984评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,763评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,468评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,357评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,850评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,002评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,144评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,823评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,483评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,026评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,150评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,415评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,092评论 2 355

推荐阅读更多精彩内容