r语言ggplot怎么把多个维度数据合并在一个图中表示_R学习:R for Data Science(二)...

公众号“生信小课堂”

f18fd1e3b43fc691d0fdcfb18dc4fa3e.png

TCGA数据分析课程:生物信息学教学

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)

7d941d99a5af305d53fc0311008642f8.png

要想通过两个变量对图进行分面,需要在绘图命令中加入函数 facet_grid()。这个函数的第一个参数也是一个公式,但该公式包含由~隔开的两个变量名。

ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy)) +
  facet_grid(drv ~ cyl)

f98e4ab2d10746fe1ad5fa9654b5c6fc.png

如果不想在行或列的维度进行分面,你可以使用 . 来代替变量名,例如 + facet_grid(. ~cyl)。

ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy)) +
  facet_grid(.~ cyl)

e4beb0856ab61b2a3432ed23574a3561.png

几何对象

7b955f1dc630ccd6fb63ede2d5373628.png

c9255a3cbb0c3a3d4e3159fe676f4a86.png

两张图有同样的 x 变量和 y 变量,而且描述的是同样的数据。但这两张图并不一样,它们各自使用不同的可视化对象来表示数据。在 ggplot2 语法中,我们称它们使用了不同的几何对象。

几何对象是图中用来表示数据的几何图形对象。我们经常根据图中使用的几何对象类型来描述相应的图。例如,条形图使用了条形几何对象,折线图使用了直线几何对象,箱线图使用了矩形和直线几何对象。散点图打破了这种趋势,它们使用点几何对象。如上面的两幅图所示,我们可以使用不同的几何对象来表示同样的数据。左侧的图使用了点几何对象,右侧的图使用了平滑曲线几何对象,以一条平滑曲线来拟合数据。

要想改变图中的几何对象,需要修改添加在 ggplot() 函数中的几何对象函数。举例来说,要想绘制出上图,你可以使用以下代码:

ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy))

7b955f1dc630ccd6fb63ede2d5373628.png
ggplot(data = mpg) +
  geom_smooth(mapping = aes(x = displ, y = hwy))

c9255a3cbb0c3a3d4e3159fe676f4a86.png

ggplot2 中的每个几何对象函数都有一个 mapping 参数。但是,不是每种图形属性都适合每种几何对象。你可以设置点的形状,但不能设置线的“形状”,而可以设置线的线型。

geom_smooth() 函数可以按照不同的线型绘制出不同的曲线,每条曲线对应映射到线型的变量的一个唯一值:

ggplot(data = mpg) +
  geom_smooth(mapping = aes(x = displ, y = hwy, linetype = drv))

96b975a6025668fa388b2d007e9cdc13.png
ggplot2 提供了 30 多种几何对象,其扩展包甚至提供了更多。如果想全面地了解这些对象,最好的方式是学习 ggplot2 速查表(文章末尾有获取方式)。如果想掌握更多关于某个几何对象的知识,那么可以使用帮助,如 ?geom_smooth。

和 geom_smooth() 一样,很多几何对象函数使用单个几何对象来表示多行数据。你可以将这些几何对象的 group 图形属性设置为一个分类变量,这样 ggplot2 就会为这个分类变量的每个唯一值绘制一个独立的几何对象。实际上,只要将一个图形属性映射为一个离散变量,ggplot2就会自动对数据进行分组来绘制多个几何对象。

ggplot(data = mpg) +
  geom_smooth(mapping = aes(x = displ, y = hwy))

96f14fffab5d6a7c2d1b9de536833ce5.png
ggplot(data = mpg) +
  geom_smooth(mapping = aes(x = displ, y = hwy, group = drv))

00f1c5871a5e0b0f6aad60f08b24c1e3.png
ggplot(data = mpg) +
  geom_smooth(
    mapping = aes(x = displ, y = hwy, color = drv),
    show.legend = FALSE
  )

9cf452fefa34e4b6cb6131d0a9f4cb79.png

要想在同一张图中显示多个几何对象,可以向 ggplot() 函数中添加多个几何对象函数:

ggplot(data = mpg) +
  geom_point(mapping = aes(x = displ, y = hwy)) +
  geom_smooth(mapping = aes(x = displ, y = hwy))

272bf7e52b02c2e54f72612732154924.png

但是,这样代码就产生了一些重复。假如你想将 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()

01e0df560df9ec753fcb8cc628a0ea4e.png

同理,你也可以为不同的图层指定不同的数据。下图中的平滑曲线表示的只是 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
  )

c7f67fd5ca24eb52903e94eeb60070b5.png

好了,今天就学到这。

公众号“生信小课堂”

f18fd1e3b43fc691d0fdcfb18dc4fa3e.png

TCGA数据分析课程:生物信息学教学

fbc005cfc15b92abbceacc0db7ae0d92.png
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值