ggplot2 | 图例(Ⅰ):图例函数、主题函数中的图例参数

本篇是ggplot2基础语法系列的第六篇推文,来介绍与图例相关的函数和参数。

library(ggplot2)
library(patchwork)

下面两幅图代码的区别仅在于映射关系中,一个是col = cyl,另一个是col = factor(cyl)

p11 <- ggplot(mtcars, aes(mpg, drat)) +
  geom_point(aes(col = cyl))

p21 <- ggplot(mtcars, aes(mpg, drat)) +
  geom_point(aes(col = factor(cyl)))

p11 + p21
  • 图1是映射变量为连续变量时的默认图例形式;

  • 图2是映射变量为离散变量时的默认图例形式。

1 图例函数

ggplot2绘图系统的图例函数的使用方式与主题函数类似(见语法入门第5部分),需要放在guides()函数内赋值给对应的映射参数:

guides(...)

图例函数以guide_开头进行命名,下文依次进行介绍。

1.1 删去图例

不同于基础绘图系统,ggplot2绘图系统的图例是自动添加的,并且与几何图形函数中的映射关系是一一对应的。但有时候,图例并不是必需的,删去图例有多种方法,具体见以下示例:

p12 <- p11 + guides(col = guide_none())
p13 <- p12 + guides(col = F)
p22 <- p21 + theme(legend.position = "none")

p12 + p13 + p22
  • 图1和图2的方法是类似的,因为图例是由映射关系col = cyl产生的,那么只需在guides()函数中将col参数赋值为guide_none()函数的输出内容或直接赋值为FALSE

  • 图3使用的是主题函数中的图例位置参数,它不针对特定的映射关系,对所有图例起作用;

  • 两种方法的区别:当有多个图例时,图1、图2的方法只会去除由col参数生成的图例,对其他图例无影响;图3的方法会去除所有图例。

1.2 连续型图例

调整连续型映射关系的图例函数是guide_colourbar(),它的语法结构如下:

guide_colourbar(
  title = waiver(), title.position = NULL, title.theme = NULL, 
  title.hjust = NULL, title.vjust = NULL,
  label = TRUE, label.position = NULL, label.theme = NULL,
  label.hjust = NULL, label.vjust = NULL,
  barwidth = NULL, barheight = NULL,
  nbin = 300, raster = TRUE,
  frame.colour = NULL, frame.linewidth = 0.5,
  frame.linetype = 1, ticks = TRUE,
  ticks.colour = "white", ticks.linewidth = 0.5,
  draw.ulim = TRUE, draw.llim = TRUE,
  direction = NULL, default.unit = "line",
  reverse = FALSE, order = 0,
  available_aes = c("colour", "color", "fill")
)

该函数的参数根据名称都很好理解,这里就不再一一介绍了。

示例如下:

p14 <- p11 + guides(col = guide_colorbar(
  title = "图例",
  frame.colour = "black",
  ticks.colour = NA,
  reverse = T,
  title.vjust = 0.8,
  barheight = 8))

p14

1.3 离散型图例

调整离散型映射关系的图例函数是guide_legend(),它的语法结构如下:

guide_legend(
  title = waiver(), title.position = NULL, title.theme = NULL, 
  title.hjust = NULL, title.vjust = NULL,
  label = TRUE, label.position = NULL, label.theme = NULL,
  label.hjust = NULL, label.vjust = NULL,
  keywidth = NULL, keyheight = NULL,
  direction = NULL, default.unit = "line",
  override.aes = list(),
  nrow = NULL, ncol = NULL, byrow = FALSE,
  reverse = FALSE, order = 0
)

示例如下:

p23 <- p21 + guides(col = guide_legend(
  title = "图例",
  nrow = 2, byrow = T,
  reverse = T
))

p23

1.4 分箱型图例

调整分箱型映射的图例函数有两个。

guide_coloursteps()函数的语法结构如下:

guide_coloursteps(
  even.steps = TRUE, show.limits = NULL,
  ticks = FALSE, ...
)

guide_bins()函数的语法结构如下:

guide_bins(
  title = waiver(), title.position = NULL,
  title.theme = NULL, title.hjust = NULL,
  title.vjust = NULL, label = TRUE,
  label.position = NULL, label.theme = NULL,
  label.hjust = NULL, label.vjust = NULL,
  keywidth = NULL, keyheight = NULL,
  axis = TRUE, axis.colour = "black",
  axis.linewidth = 0.5, axis.arrow = NULL,
  direction = NULL, default.unit = "line",
  override.aes = list(), reverse = FALSE,
  order = 0, show.limits = NULL,
  ...
)

通过以下示例可以看出两个函数效果的区别:

p31 <- ggplot(mtcars, aes(mpg, drat)) + 
  geom_point(aes(col = mpg))

p32 <- p31 + guides(col = guide_colorsteps())
p33 <- p31 + guides(col = guide_bins())

p32 + p33

1.5 调整坐标轴

ggplot2工具包的开发者认为图例与坐标轴的要素存在共通之处,因此将图例和坐标轴统称为guide。具体见下图:

图片来源:https://ggplot2-book.org/scales-guides.html

调整坐标轴的函数是guide_axis(),语法结构如下:

guide_axis(
  title = waiver(), check.overlap = FALSE,
  angle = NULL, n.dodge = 1,
  order = 0, position = waiver()
)

上篇介绍了坐标标度函数,各位读者可以将其与如下代码对比:

p41 <- ggplot(mtcars, aes(mpg, drat)) + geom_point()

p41 + guides(x = guide_axis(
  title = "自变量",
  angle = 45
))

2 主题函数中的图例参数

图例函数对图例的调整是比较有限的,主题函数theme()函数中与图例有关的参数如下:

theme(
  ...,
  legend.background,
  legend.margin,
  legend.spacing,
  legend.spacing.x,
  legend.spacing.y,
  legend.key,
  legend.key.size,
  legend.key.height,
  legend.key.width,
  legend.text,
  legend.text.align,
  legend.title,
  legend.title.align,
  legend.position,
  legend.direction,
  legend.justification,
  legend.box,
  legend.box.just,
  legend.box.margin,
  legend.box.background,
  legend.box.spacing,
  ...
)

比如许多人不太喜欢图例中自带的白色背景,尤其是在离散映射的图例中,而图例函数是不能对其调整的,需要使用主题函数中的legend.key参数。具体见如下代码:

p24 <- p23 + theme(
  legend.key = element_rect(fill = NA, colour = "grey")
)

p24

3 多图例管理

上文都是针对单个图例的介绍。当一幅图存在多种映射关系时,可能出现多个图例,下文提供一些多图例管理的思路。

第一种情况是,多个映射关系对应的是同一个离散变量,这时图例会自动进行合并,实际上不算是真正的多图例。

示例如下:

p51 <- ggplot(mtcars, aes(mpg, drat)) +
  geom_point(aes(col = factor(cyl), size = factor(cyl)))

p51

第二种情况是真正的多图例,如下:

p52 <- ggplot(mtcars, aes(mpg, drat)) +
  geom_point(aes(col = factor(cyl), size = factor(vs)))

p52

在使用图例函数调整时,需要分别对映射参数进行赋值:

p53 <- p52 + guides(col = guide_legend(title = "cyl",
                                order = 1),
             size = guide_legend(title = "vs",
                                 order = 2))

p53
  • order参数用于调整图例的顺序。

使用主题函数中的图例参数时,针对的是所有图例:

p54 <- p53 + theme(
  legend.key = element_rect(fill = NA, colour = "grey")
)

p54

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值