R学习:R for Data Science(三)

R语言学习系列

今天我们来继续学习R for Data Science

R学习:R for Data Science(一)

R学习:R for Data Science(二)

统计变换

接下来我们看一下条形图。条形图虽然简单,但很有意思,因为它可以揭示出图形中的一些微妙信息。我们看一下用 geom_bar() 函数就可以绘制的基本条形图。下面的条形图显示了 diamonds 数据集中按照 cut 变量分组的各种钻石的总数量。diamonds 数据集是 ggplot2的内置数据集,包含大约 54 000 颗钻石的信息,每颗钻石具有 price、 carat、 color、clarity 和 cut 变量。条形图显示,高质量切割钻石的数量要比低质量切割钻石的数量多:

rm(list = ls())library(tidyverse)library(ggplot2)data = diamondsggplot(data = diamonds) + geom_bar(mapping = aes(x = cut))

条形图 x 轴显示的是 cut,这是 diamonds 数据集中的一个变量。y 轴显示的是 count,但count 不是 diamonds 中的变量!那么 count 来自哪里呢?很多图形绘制的是数据集的原始数据,比如散点图。另外一些图形则可以绘制那些计算出的新数据,比如条形图。

·条形图、直方图和频率多边形图可以对数据进行分箱,然后绘制出分箱数量和落在每个 分箱的数据点的数量。

·平滑曲线会为数据拟合一个模型,然后绘制出模型预测值。

·箱线图可以计算出数据分布的多种摘要统计量,并显示一个特殊形式的箱体。

绘图时用来计算新数据的算法称为 stat(statistical transformation, 统计变换)。下图描述了geom_bar() 函数的统计变换过程。

通过查看 stat 参数的默认值,你可以知道几何对象函数使用了哪种统计变换。例如,?geom_bar 显示出 stat 的默认值是 count,这说明 geom_bar() 使用 stat_count() 函数进行统计变换。
通常来说,几何对象函数和统计变换函数可以互换使用。例如,你可以使用 stat_count()替换 geom_bar() 来重新生成前面那张图:

ggplot(data = diamonds) +stat_count(mapping = aes(x = cut))

可以这样做的原因是,每个几何对象函数都有一个默认统计变换,每个统计变换函数都有一个默认几何对象。一般情况下,这意味着你在使用几何对象函数时不用担心底层的统计变换。想要显式使用某种统计变换的 3 个原因如下。
· 你可能想要覆盖默认的统计变换。在以下代码中,我们将 geom_bar() 函数的统计变换从计数(默认值)修改为标识。这样我们就可以将条形的高度映射为 y 轴变量的初始值。遗憾的是,当随意说起条形图时,人们指的可能就是这种条形图,其中条形高度已经存在于数据中,而不是像前一个图一样,条形高度由对行进行计数来生成:

demo <- tribble( ~a, ~b, "bar_1", 20, "bar_2", 30, "bar_3", 40)ggplot(data = demo) + geom_bar( mapping = aes(x = a, y = b), stat = "identity" )

你可能想要覆盖从统计变换生成的变量到图形属性的默认映射。例如显示一张表示比例(而不是计数)的条形图:

ggplot(data = diamonds) + geom_bar( mapping = aes(x = cut, y = ..prop.., group = 1) )

你可能想要在代码中强调统计变换。例如,你可以使用 stat_summary() 函数。stat_summary() 函数为 x 的每个唯一值计算 y 值的摘要统计:

ggplot(data = diamonds) + stat_summary( mapping = aes(x = cut, y = depth), fun.ymin = min, fun.ymax = max, fun.y = median )

ggplot2 提供了 20 多个统计变换以供你使用。每个统计变换都是一个函数,因此你可以按照通用方式获得帮助,例如 ?stat_bin。如果想要查看全部的统计变换,可以使用 ggplot2速查表(见文末)。

位置调整

条形图还有一项神奇的功能,你可以使用 color 或者 fill(这个更有用)图形属性来为条形图上色:

ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, color = cut))ggplot(data = diamonds) + geom_bar(mapping = aes(x = cut, fill = cut))

注意,如果将 fill 图形属性映射到另一个变量(如 clarity),那么条形会自动分块堆叠起来。每个彩色矩形表示 cut 和 clarity 的一种组合。

这种堆叠是由 position 参数设定的位置调整功能自动完成的。如果不想生成堆叠式条形图,你还可以使用以下 3 种选项之一:"identity"、 "fill" 和 "dodge"。
· position = "identity" 将每个对象直接显示在图中。这种方式不太适合条形图,因为条形会彼此重叠。为了让重叠部分能够显示出来,我们可以设置 apha 参数为一个较小的数,从而使得条形略微透明;或者设定 fill = NA,让条形完全透明:

ggplot( data = diamonds, mapping = aes(x = cut, fill = clarity)) +  geom_bar(alpha = 1/5, position = "identity")
ggplot( data = diamonds, mapping = aes(x = cut, color = clarity)) +  geom_bar(fill = NA, position = "identity")

· position = "fill" 的效果与堆叠相似,但每组堆叠条形具有同样的高度,因此这种条形图可以非常轻松地比较各组间的比例:

ggplot(data = diamonds) + geom_bar( mapping = aes(x = cut, fill = clarity), position = "fill" )

· position = "dodge" 将每组中的条形依次并列放置,这样可以非常轻松地比较每个条形表示的具体数值:

坐标系

坐标系可能是 ggplot2 中最复杂的部分。默认的坐标系是笛卡儿直角坐标系,可以通过其独立作用的 x 坐标和 y 坐标找到每个数据点。偶尔也会用到一些其他类型的坐标系。

· coord_flip() 函数可以交换 x 轴和 y 轴。当想要绘制水平箱线图时,这非常有用。它也非常适合使用长标签,但要想在 x 轴上不重叠地安排好它们是非常困难的:

ggplot(mpg,aes(x = class, y = hwy)) + geom_boxplot()
ggplot(data = mpg, mapping = aes(x = class, y = hwy)) + geom_boxplot() + coord_flip()

· coord_polar() 函数使用极坐标系。极坐标系可以揭示出条形图和玫瑰图间的一种有趣联系:

bar <- ggplot(data = diamonds) + geom_bar( mapping = aes(x = cut, fill = cut), show.legend = FALSE, width = 1 ) + theme(aspect.ratio = 1) + labs(x = NULL, y = NULL)bar + coord_flip()
bar + coord_polar()

看到这个图,想到昨天看的人民日报上的图

总结

在前面几节中,我们学到的绝不仅仅是如何绘制散点图、条形图和箱线图,而是使用 ggplot2绘制任何类型图形的基础知识。为了说明这一点,我们向前面的代码模板中添加位置调整、统计变换、坐标系和分面:

ggplot(data = <DATA>) + <GEOM_FUNCTION>( mapping = aes(<MAPPINGS>), stat = <STAT>, position = <POSITION> ) + <COORDINATE_FUNCTION> + <FACET_FUNCTION>

新模板有 7 个参数,即模板中尖括号内的部分。实际上,绘图时几乎不需要提供所有的 7个参数,因为除了数据、映射和几何对象函数, ggplot2 为所有其他参数提供了非常有用的默认设置。模板中的 7 个参数一同组成了图形语法,即用于建立图形的一个正式语法系统。你可以将任何图形精确地描述为数据集、几何对象、映射集合、统计变换、位置调整、坐标系和分面模式的一个组合,图形语法正是基于这样的深刻理解构建出来的。

为了说明图形语法的工作方式,我们看一下如何从头开始构建一个基本图形:首先需要有一个数据集,然后(通过统计变换)将其转换为想要显示的信息。

接下来,你可以选择一个几何对象来表示转换后的数据中的每个观测值,然后选择几何对象的图形属性来表示数据中的变量,这会将每个变量的值映射为图形属性的水平。

下一步是选择放置几何对象的坐标系。你可以使用对象位置(对象本身的一个图形属性)来显示 x 变量和 y 变量的值。这样就生成了一张完整的图。但你还可以进一步调整几何对象在坐标系中的位置(位置调整),或者将图划分为多个子图(分面)。你还可以通过添加一个或多个附加图层对图进行扩展,其中每个附加图层都使用一个数据集、一个几何对象、一个映射集合、一个统计变换和一个位置调整。

你可以使用这种方法构建你能够想象到的任何图形。
好了,第一章我们学习完了。

另外,最近收集了一些很好的资源,分享给大家,顺便能涨一些粉,主要有

1. 19年中标的各门类国自然题目汇总,以及17年的国自然汇总,部分含摘要!

2. R语言学习书籍

R语言实战(中文完整版)

R数据科学(中文完整版)

ggplot2:数据分析与图形艺术

30分钟学会ggplot2

3. TCGA数据整理

前期从https://xenabrowser.net/datapages/ (UCSC Xena)数据库下载的TCGA数据,传到了百度云上备份。

ggplot2速查表pdf(可复制)

感兴趣的话,转发朋友圈或者100人以上的微信群,截图发到公众号,即可获取全部资源的百度云链接,链接7天有效,希望大家赶紧下载。你们的支持是我前进的动力,感谢。

(0)

相关推荐