ggplot2 legend学习小结-2ggplot2中能够控制legend的功能主要分散在三个地方:theme() , guides() 和scale_ 系列函数,今天从ggplot2中能够控制legend的所有函数出发,对其进行总结。
画出示例图片
1library(ggplot2) 2library(tidyverse) 3 4mtcars$gear <- factor(mtcars$gear) 5(plot <- mtcars %>% 6 ggplot(aes(x = gear)) + 7 geom_bar(aes(fill = gear)) + 8 theme_bw() 9)

ggplot2中能够控制legend的函数分别分布再三个函数中,theme ,scale_系列函数 和guides 函数。
theme 函数
其中theme 函数主要是控制legend元素的apperance,也就是外观,如字体颜色,分布等等。 legend.backgroud
控制整个legend区域的背景颜色,默认为白色。可以赋值的函数包括element_blank 和element_rect 。如果使用element_blank 函数,则整个背景为空,也就是透明。 1plot + 2 theme(plot.background = element_rect(fill = 'blue'))

我们将默认plot背景改为蓝色,可以看到legend默认背景为白色。
1plot + 2 theme(plot.background = element_rect(fill = 'blue'), 3 legend.background = element_blank())

可以看到legend背景改为了透明,也能看出来legend背景的范围。 1plot + 2 theme(legend.background = element_rect(fill = 'red', colour = 'blue', 3 size = 3, linetype = 2))

使用legend_rect 则可以设置legend背景的填充颜色(fill),边框颜色(colour/color),边框线的宽度(size)和类型(linetype)。 legend.box 系列函数
legend.box 系列函数主要是调整有多个legend的情况。我们先来构建一个拥有两个legend的图片。
1(plot2 <- ggplot(mtcars, aes(x = mpg, y = drat)) + 2 geom_point(aes(size = wt, colour = gear)) 3) 4

可以看到两个legend默认垂直排列。如果想修改他们的排列方式,则可以使用legend.box 函数。 1plot2 + 2 theme(legend.box = 'horizontal')

当有多个legend的时候,可以选择如何对其他们,使用legend.box.just 函数。 1##两个legend水平排列,并且底部对齐 2plot2 + 3 theme(legend.box = 'horizontal', 4 legend.box.just = 'bottom')

该函数用来设置所有legend的周围的距离。该函数需要和margin 函数配合使用。 1plot2 + 2 theme(legend.box.margin = margin(5, 5, 5, 5, 'cm'))

该函数用来设置两个legend的背景,与其他background系列函数一样,与element_blank 和element_rect 函数联合使用。但是从实际效果来看,好像只能控制两个legend之间的部分? 1plot2 + 2 theme(legend.box.background = element_rect(fill = 'red', colour = 'blue'))

如果要控制其他部分,还是需要使用legend.backgroud 函数。
1plot2 + 2 theme(legend.background = element_rect(fill = 'red', colour = 'blue'), 3 legend.box.background = element_rect(fill = 'red'))

该函数用来控制legend和画图区域之间的距离。配合unit 函数使用。 1plot2 + 2 theme(legend.box.spacing = unit(7, 'cm'))

legend.key 系列函数
该系列函数用来控制legend的每个元素的内容 与element_blank 和element_rect 配合使用,控制每个key的背景。 1plot + 2 theme(legend.key = element_rect(fill = 'red', colour = 'blue', size = 2, linetype = 2))

控制legend key的大小(与unit 函数配合使用),宽度和高度。比如点的大小等等。 1plot + 2 theme(legend.key.size = unit(3, 'cm'))

legend.margin
控制legend和边缘的距离。和margin 函数配合使用。 1plot + 2 theme(legend.margin = margin(3,3,3,3, 'cm'))

legend.spacing 系列函数
控制legend各个元素之间的距离。 1plot + 2 theme(legend.position = 'bottom', legend.spacing.x = unit(1, 'cm'))

legend.text
控制legend标识的外观。与element_blank 或者element_rect 函数配合使用。 1plot + 2 theme(legend.text = element_blank())

去掉lable,不显示。
1plot + 2 theme(legend.text = element_text(face = 'bold', colour = 'red', size = 20))

legend.title
控制legend title的外观。与element_blank 或者element_rect 函数配合使用。 legend.position 和legend.justification
控制legend的位置。设置为'none'则不显示legend。可以直接选择设置为'top', 'left', 'right'和'bottom'。也可以设置为c(x, y),并和legend.justification 函数配合使用,比较有用的是将其放在某个角落。 1plot + 2 theme(legend.position = c(1,1), legend.justification = c(1,1), 3 legend.background = element_rect(colour = 'black'))

legend.direction
控制legend水平或者垂直展示。
guides 函数
另外一个能够控制legend的函数为guides 函数。guides 函数 fill , colour , size 等参数
legend也是一种scale方式,因此在guides 中通过控制这些参数,可以控制其外表。需要和guide_colourbar() 或者guide_legend() 联合使用。其中guide_colourbar() 是主要用于连续性的颜色变量,而guide_legend() 则主要用于所有非连续的变量。 当然,如果要将某个legend不显示,那么直接将该scale设置为FALSE即可。 1plot2 + 2 guides(size = FALSE)

guides 函数的完整设置设置。
1plot2 + 2 guides(colour = guide_legend(title = 'Colour', 3 title.position = 'left', 4 title.theme = element_text(colour = 'red'), 5 title.hjust = 0, 6 title.vjust = 0.5, 7 label = TRUE, 8 label.position = 'left', 9 label.theme = element_text(colour = 'red'), 10 label.hjust = 0, 11 label.vjust = 0.5, 12 override.aes = list(size = 5), 13 ncol = 2, 14 nrow = 2, 15 byrow = TRUE, 16 reverse = TRUE, 17 keywidth = unit(1, 'cm'), 18 keyheight = unit(1, 'cm'), direction = 'veritical', 19 default.unit = 'cm' 20 ))

可以看到在guides函数中,大部分功能和在theme中的设置是重合的。其中有几个功能是没有的,比如设置背景。而在guides函数中特有的功能包括:设置legend label大小:override.aes ,设置legend显示列数或者行数:ncol 和ncol ,label逆序排列:reverse 。
因为guides 函数主要就是用来设置legend的,所以推荐能够在其中设置的都在这里面设置,而不能够的,再在其他函数中设置。
scale_ 系列函数
在每个scale_ 系列函数中,都保留了guide参数,可以和guide_colourbar() 或者guide_legend() 联合使用,实现和guides 函数的功能。同样的,因为其中已经有很多参数了,所以不建议在这进行设置。scale_ 系列函数可以对legend做一些其他无法进行的修改。 limits 参数
该参数用于连续变量,可以设置连续变量的范围,而用于非连续变量,则可以用来选择显示哪些变量。 1plot2 + 2 scale_colour_discrete(limits = c('3', '4')) + 3 scale_size_continuous(limits = c(3, 4))

label 参数
该参数可以和limits 参数配合使用用来修改legend的顺序和文字。 1plot2 + 2 scale_colour_discrete(limits = c('4', '3'), label = c('Four', 'Threee'))

------------------------------------------------------------------------
|