当前位置:   article > 正文

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

ggplot图例

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

  1. library(ggplot2)
  2. library(patchwork)

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

  1. p11 <- ggplot(mtcars, aes(mpg, drat)) +
  2.   geom_point(aes(col = cyl))
  3. p21 <- ggplot(mtcars, aes(mpg, drat)) +
  4.   geom_point(aes(col = factor(cyl)))
  5. p11 + p21
  • 图1是映射变量为连续变量时的默认图例形式;

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

1 图例函数

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

guides(...)

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

1.1 删去图例

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

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

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

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

1.2 连续型图例

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

  1. guide_colourbar(
  2.   title = waiver(), title.position = NULL, title.theme = NULL, 
  3.   title.hjust = NULL, title.vjust = NULL,
  4.   label = TRUE, label.position = NULL, label.theme = NULL,
  5.   label.hjust = NULL, label.vjust = NULL,
  6.   barwidth = NULL, barheight = NULL,
  7.   nbin = 300, raster = TRUE,
  8.   frame.colour = NULL, frame.linewidth = 0.5,
  9.   frame.linetype = 1, ticks = TRUE,
  10.   ticks.colour = "white", ticks.linewidth = 0.5,
  11.   draw.ulim = TRUE, draw.llim = TRUE,
  12.   direction = NULL, default.unit = "line",
  13.   reverse = FALSE, order = 0,
  14.   available_aes = c("colour""color""fill")
  15. )

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

示例如下:

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

1.3 离散型图例

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

  1. guide_legend(
  2.   title = waiver(), title.position = NULL, title.theme = NULL, 
  3.   title.hjust = NULL, title.vjust = NULL,
  4.   label = TRUE, label.position = NULL, label.theme = NULL,
  5.   label.hjust = NULL, label.vjust = NULL,
  6.   keywidth = NULL, keyheight = NULL,
  7.   direction = NULL, default.unit = "line",
  8.   override.aes = list(),
  9.   nrow = NULL, ncol = NULL, byrow = FALSE,
  10.   reverse = FALSE, order = 0
  11. )

示例如下:

  1. p23 <- p21 + guides(col = guide_legend(
  2.   title = "图例",
  3.   nrow = 2, byrow = T,
  4.   reverse = T
  5. ))
  6. p23

1.4 分箱型图例

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

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

  1. guide_coloursteps(
  2.   even.steps = TRUE, show.limits = NULL,
  3.   ticks = FALSE, ...
  4. )

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

  1. guide_bins(
  2.   title = waiver(), title.position = NULL,
  3.   title.theme = NULL, title.hjust = NULL,
  4.   title.vjust = NULL, label = TRUE,
  5.   label.position = NULL, label.theme = NULL,
  6.   label.hjust = NULL, label.vjust = NULL,
  7.   keywidth = NULL, keyheight = NULL,
  8.   axis = TRUE, axis.colour = "black",
  9.   axis.linewidth = 0.5, axis.arrow = NULL,
  10.   direction = NULL, default.unit = "line",
  11.   override.aes = list(), reverse = FALSE,
  12.   order = 0, show.limits = NULL,
  13.   ...
  14. )

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

  1. p31 <- ggplot(mtcars, aes(mpg, drat)) + 
  2.   geom_point(aes(col = mpg))
  3. p32 <- p31 + guides(col = guide_colorsteps())
  4. p33 <- p31 + guides(col = guide_bins())
  5. p32 + p33

1.5 调整坐标轴

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

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

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

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

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

  1. p41 <- ggplot(mtcars, aes(mpg, drat)) + geom_point()
  2. p41 + guides(x = guide_axis(
  3.   title = "自变量",
  4.   angle = 45
  5. ))

2 主题函数中的图例参数

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

  1. theme(
  2.   ...,
  3.   legend.background,
  4.   legend.margin,
  5.   legend.spacing,
  6.   legend.spacing.x,
  7.   legend.spacing.y,
  8.   legend.key,
  9.   legend.key.size,
  10.   legend.key.height,
  11.   legend.key.width,
  12.   legend.text,
  13.   legend.text.align,
  14.   legend.title,
  15.   legend.title.align,
  16.   legend.position,
  17.   legend.direction,
  18.   legend.justification,
  19.   legend.box,
  20.   legend.box.just,
  21.   legend.box.margin,
  22.   legend.box.background,
  23.   legend.box.spacing,
  24.   ...
  25. )

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

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

3 多图例管理

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

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

示例如下:

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

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

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

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

  1. p53 <- p52 + guides(col = guide_legend(title = "cyl",
  2.                                 order = 1),
  3.              size = guide_legend(title = "vs",
  4.                                  order = 2))
  5. p53
  • order参数用于调整图例的顺序。

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/65986?site
推荐阅读
相关标签
  

闽ICP备14008679号