赞
踩
本篇是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是映射变量为离散变量时的默认图例形式。
ggplot2
绘图系统的图例函数的使用方式与主题函数类似(见语法入门第5部分),需要放在guides()
函数内赋值给对应的映射参数:
guides(...)
图例函数以guide_
开头进行命名,下文依次进行介绍。
不同于基础绘图系统,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的方法会去除所有图例。
调整连续型映射关系的图例函数是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
调整离散型映射关系的图例函数是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
调整分箱型映射的图例函数有两个。
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
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
- ))
图例函数对图例的调整是比较有限的,主题函数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
上文都是针对单个图例的介绍。当一幅图存在多种映射关系时,可能出现多个图例,下文提供一些多图例管理的思路。
第一种情况是,多个映射关系对应的是同一个离散变量,这时图例会自动进行合并,实际上不算是真正的多图例。
示例如下:
- 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
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。