ggplot2读书笔记10:第七章 定位(分面和坐标系)

本章探讨ggplot2中的图形定位,包括分面和坐标系的使用。分面通过facet_wrap()和facet_grid()实现数据子集的可视化,控制标度以比较不同子集。坐标系部分介绍了线性坐标系的调整和非线性坐标系的特性,如极坐标和地图投影。通过对坐标轴范围、比例和翻转的控制,能更好地呈现数据分布。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Positioning

7.1 简介

本章主题是图形的定位。

定位由四个部分组成,前两个在前期讲过,而后两个部分在这章中会详细说到:

  • 位置调整:调整每个图层中出现重叠的对象的位置
  • 位置标度:控制数据到图形的映射
  • 分面:在一个页面上自动摆放多个图形。将数据分为多个子集,然后将每个子集依次绘制到不同面板上
  • 坐标系:控制两个独立的位置标度形成一个二维坐标系,如笛卡尔坐标系

7.2 分面

每个小图都代表不同的数据子集。分面可以快速地分析数据各子集模式的异同。

本节讨论怎样较好微调分面,特别是和位置标度相关的方法。

  • facet_null():默认,无分面,单一图形。

  • face_wrap():封装型,本质上是1维,为节省空间封装成二维

  • face_grid():网格型,生成一个二维的面板由两个独立的部分组成,,面板的行和列可以通过变量来定义

image

facet_wrap()

使用这个参数设置一长串面板二维排列,更加节省空间

可以通过ncolnrowas.tabledir等参数设置排列。

如下例:

library(ggplot2)
## 从mpg数据集中取一个子集mpg2
mpg2 <- subset(mpg, cyl != 5 & drv %in% c("4", "f") & class != "2seater")

base <- ggplot(mpg2, aes(displ, hwy)) +
  geom_blank() +
  xlab(NULL) +
  ylab(NULL)
base

image

## 添加分面,设置ncol或nrow(二选一即可)
base + facet_wrap(~class, ncol = 3)

image

## 设置as.table
base + facet_wrap(~class, ncol = 3, as.table = FALSE)

as.table决定各个分面的排列顺序。

image

## 设置dir,水平或垂直排列
base + facet_wrap(~class, nrow = 3, dir = "v")

image

facet_grid()

网格分面,在二维网格中展示图形。

需要设定哪些变量作为分面绘图的行,哪些变量作为列,中间用~短波浪线做标记。

如下例:

mpg2 <- subset(mpg, cyl != 5 & drv %in% c("4", "f") & class != "2seater")

base <- ggplot(mpg2, aes(displ, hwy)) +
  geom_blank() +
  xlab(NULL) +
  ylab(NULL)
## 一行多列
base + facet_grid(. ~ cyl)
## 一列多行
base + facet_grid(drv ~ .)
## 多行多列
base + facet_grid(drv ~ cyl)

依次生成下列三种:

image

image

image

控制标度

scales = "fixed": x 和 y的标度在所有分面中都相同(默认)
scales = "free_x": x 的标度可变,y 固定
scales = "free_y": y 的标度可变,x 固定
scales = "free": x 和 y 的标度都可变

如下例:

p <- ggplot(mpg2, aes(cty, hwy)) +
  geom_abline() +
  geom_jitter(width = 0.1, height = 0.1)
## 默认各个分面标度一致
p + facet_wrap(~cyl)
## 设置分面标度可变
p + facet_wrap(~cyl, scales = "free")

依次生成下图:

image

固定标度可以让我们在相同的基准上对子集进行比较

image

自由标度可以帮助我们看到更多细节

在变量y单位、数量级不同时,单独固定x轴,不限制y轴也很常用。如下例,经济数据集:

> economics_long
# A tibble: 2,870 x 4
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值