R学习:R for Data Science(二)
R语言学习系列
昨天我们开始了R for Data Science这本书的学习,今天我们来继续学习
分面
添加额外变量的一种方法是使用图形属性。另一种方法是将图分割成多个分面,即可以显示数据子集的子图。这种方法特别适合添加分类变量。
library(tidyverse)
library(ggplot2)
a=mpg#查看mpg
要想通过单个变量对图进行分面,可以使用函数facet_wrap()。其第一个参数是一个公式,创建公式的方式是在 ~ 符号后面加一个变量名(这里所说的“公式”是R中的一种数据结构,不是数学意义上的公式)。传递facet_wrap()的变量应该是离散型的。
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_wrap(~ class, nrow = 2)
要想通过两个变量对图进行分面,需要在绘图命令中加入函数 facet_grid()。这个函数的第一个参数也是一个公式,但该公式包含由~隔开的两个变量名。
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_grid(drv ~ cyl)
如果不想在行或列的维度进行分面,你可以使用 . 来代替变量名,例如 + facet_grid(. ~cyl)。
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
facet_grid(.~ cyl)
几何对象
两张图有同样的 x 变量和 y 变量,而且描述的是同样的数据。但这两张图并不一样,它们各自使用不同的可视化对象来表示数据。在 ggplot2 语法中,我们称它们使用了不同的几何对象。
几何对象是图中用来表示数据的几何图形对象。我们经常根据图中使用的几何对象类型来描述相应的图。例如,条形图使用了条形几何对象,折线图使用了直线几何对象,箱线图使用了矩形和直线几何对象。散点图打破了这种趋势,它们使用点几何对象。如上面的两幅图所示,我们可以使用不同的几何对象来表示同样的数据。左侧的图使用了点几何对象,右侧的图使用了平滑曲线几何对象,以一条平滑曲线来拟合数据。
要想改变图中的几何对象,需要修改添加在 ggplot() 函数中的几何对象函数。举例来说,要想绘制出上图,你可以使用以下代码:
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy))
ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy))
ggplot2 中的每个几何对象函数都有一个 mapping 参数。但是,不是每种图形属性都适合每种几何对象。你可以设置点的形状,但不能设置线的“形状”,而可以设置线的线型。
geom_smooth() 函数可以按照不同的线型绘制出不同的曲线,每条曲线对应映射到线型的变量的一个唯一值:
ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy, linetype = drv))
ggplot2 提供了 30 多种几何对象,其扩展包甚至提供了更多。如果想全面地了解这些对象,最好的方式是学习 ggplot2 速查表(文章末尾有获取方式)。如果想掌握更多关于某个几何对象的知识,那么可以使用帮助,如 ?geom_smooth。
和 geom_smooth() 一样,很多几何对象函数使用单个几何对象来表示多行数据。你可以将这些几何对象的 group 图形属性设置为一个分类变量,这样 ggplot2 就会为这个分类变量的每个唯一值绘制一个独立的几何对象。实际上,只要将一个图形属性映射为一个离散变量,ggplot2就会自动对数据进行分组来绘制多个几何对象。
ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy))
ggplot(data = mpg) +
geom_smooth(mapping = aes(x = displ, y = hwy, group = drv))
ggplot(data = mpg) +
geom_smooth(
mapping = aes(x = displ, y = hwy, color = drv),
show.legend = FALSE
)
要想在同一张图中显示多个几何对象,可以向 ggplot() 函数中添加多个几何对象函数:
ggplot(data = mpg) +
geom_point(mapping = aes(x = displ, y = hwy)) +
geom_smooth(mapping = aes(x = displ, y = hwy))
但是,这样代码就产生了一些重复。假如你想将 y 轴上的变量从 hwy 改成 cty,那么就要在两个地方修改这个变量,但你或许会漏掉一处。避免这种重复的方法是将一组映射传递给 ggplot() 函数。ggplot2 会将这些映射作为全局映射应用到图中的每个几何对象中。换句话说,以下代码将绘制出与上面代码同样的图:
ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point() +
geom_smooth()
如果将映射放在几何对象函数中,那么 ggplot2 会将其看作这个图层的局部映射,它将使用这些映射扩展或覆盖全局映射, 但仅对该图层有效。这样一来,我们就可以在不同的图层中显示不同的图形属性:
ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point(mapping = aes(color = class)) +
geom_smooth()
同理,你也可以为不同的图层指定不同的数据。下图中的平滑曲线表示的只是 mpg 数据集的一个子集,即微型车。geom_smooth() 函数中的局部数据参数覆盖了 ggplot() 函数中的全局数据参数,当然仅对这个图层有效:
ggplot(data = mpg, mapping = aes(x = displ, y = hwy)) +
geom_point(mapping = aes(color = class)) +
geom_smooth(
data = filter(mpg, class == "subcompact"),
se = FALSE
)
好了,今天就学到这。
另外,最近收集了一些很好的资源,分享给大家,顺便能涨一些粉,主要有
1. 19年中标的各门类国自然题目汇总,以及17年的国自然汇总,部分含摘要!
2. R语言学习书籍
R语言实战(中文完整版)
R数据科学(中文完整版)
ggplot2:数据分析与图形艺术
30分钟学会ggplot2
3. TCGA数据整理
前期从https://xenabrowser.net/datapages/ (UCSC Xena)数据库下载的TCGA数据,传到了百度云上备份。
4. ggplot2速查表pdf(可复制)
感兴趣的话,转发朋友圈或者100人以上的微信群,截图发到公众号,即可获取全部资源的百度云链接,链接7天有效,希望大家赶紧下载。你们的支持是我前进的动力,感谢。