ggplot2-用图层构建图像

1. 简介

ggplot2背后的关键思想之一是ggplot2允许使用者很容易地在同一时间迭代、创建一个复杂的图形。每个图层可以有子集的数据集和图形属性映射,这也使得从多种数据源中创建复杂的图形变得可能

本章将深入图层的细节并掌握如何掌握所有的5个组件:数据、图形属性映射、几何对象、统计变换、位置调整

2. 创建绘图对象

目前为止,每当使用ggplot()函数创建一个图形,我们会立刻使用几何对象函数加一个图层
需要认识到这个过程包括两步
首先是用默认数据集创建一个图形和图形属性映射

p <- ggplot(mpg, aes(displ, hwy))

此时还不能看到什么东西,因此需要增加一个图层

p + geom_point()

在这里插入图片描述

geom_point()函数是一个简写,在背后geom_point()被layer()函数创建一个新图层

p + layer(mapping = NULL, data = NULL, geom = "point", stat = "identity", position = "identity")

在这里插入图片描述

这就把全部指定的5个组件加到图层上了

  1. mapping: 一组图形属性映射,通过aes()函数来设定并结合图形属性映射中使用画图的默认属性。如果是NULL则使用ggplot()默认的映射设置
  2. data:一个数据集,它会修改默认的数据集。大部分情况下该参数被省略掉(设为NULL),默认数据集将被ggplot()函数调用。
  3. geom:几何对象的名字,用于绘制每个观察值。几何对象有一些额外的参数。所有的几何对象将图形属性作为参数。如果提供一个图形属性(如颜色)作为一个参数,它不会被标度,允许你控制图形的外观,在设定和映射中有详细描述。可以通过省略号省略这些参数(在统计变换和几何参数可以自动去除的情况下),或者是通过geom_params的列表传递
  4. stat: 统计变换的简称。一个统计变换展示了一些有用的统计概要,这对直方图和光滑曲线是很有用的。为了保持数据原始的信息,使用“identity”的统计变换,在统计变换会学到更多。大多数的统计变换通过额外的参数来指定统计变换的细节。可以提供省略号参数(某种情况下统计变换和几何参数会自动拆开)或称为stat_params的列表
  5. position:这个方法用来调整重叠的对象,如抖动、避开、堆叠等

理解layer()函数是很有用的,不过一般很少会使用完整的layer()调用,因为它很冗长。相反,可以使用geom_类型的快捷函数,geom_point(mapping, data, …)完全等价于layer(mapping, data, geom = “point”, …)

3. 数据

每个图层必须有一些数据和它是相关的,并且数据必须是整齐的数据框。将在数据整理中了解它。现在需要知道的是一个整齐的数据框是在列中有变量在行中有观察值的,这是一个很强的限制,但是对于这个限制有充分的理由

  1. 最好明确知道你的数据是十分重要的
  2. 一个单独的数据框比众多的向量更容易保存,这意味着很容易重复成果或将自己的数据转发给别人
  3. 强迫我们把关注点分开:ggplot2将数据框转化为可视化的。其它的软件包可将数据转化为合适的格式

在每一层上的数据不需要一样,并且将多个数据集画到一个图中也是很有用的

根据mpg数据集生成2个新的数据集
首先拟合一个loess模型并从中生成预测值(这就是geom_smooth()所做的)

mod <- loess(hwy ~ displ, data = mpg)
grid <- data.frame(displ = seq(min(mpg$displ), max(mpg$displ), length = 50))
grid$hwy <- predict(mod, newdata = grid)

接下来,把与预测值相距较远的观测值分离出来

std_resid <- resid(mod) / mod$s
outlier <- mpg[abs(std_resid) > 2,]

使用统计摘要和注释对加强原始数据的展示效果是很常见的。使用这些新的数据集,通过添加平滑曲线并对离群值打标签,能提高最初散点图的质量

ggplot(mpg, aes(displ, hwy)) +
	geom_point() +
	geom_line(data = grid, color = "blue", size = 1.5) +
	geom_text(data = outlier, aes(label = model))

在这里插入图片描述

注意在图层中需要明确地设定 data =,但在ggplot()中不需要,那是因为参数地顺序是不一样的。常常在ggplot()中指定数据并且在每层中调整图层属性

这个例子中,每个图层使用不同的数据集,可以用另一种方式来定义相同的图形,忽略默认的数据集,并在每一层指定一个数据集

ggplot(mapping = aes(displ, hwy)) +
	geom_point(data = mpg) +
	geom_line(data = grid) +
	geom_text(data = outlier, aes(label = model))

不过这个例子的风格可能会让原本的数据集变得不清晰

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值