分享

ggplot2 legend学习小结-2

 生物_医药_科研 2019-08-05

ggplot2 legend学习小结-2

ggplot2中能够控制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的函数分别分布再三个函数中,themescale_系列函数guides函数。


theme函数

其中theme函数主要是控制legend元素的apperance,也就是外观,如字体颜色,分布等等。

  1. legend.backgroud

控制整个legend区域的背景颜色,默认为白色。可以赋值的函数包括element_blankelement_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)。

  1. legend.box系列函数

legend.box系列函数主要是调整有多个legend的情况。我们先来构建一个拥有两个legend的图片。

1(plot2 <- ggplot(mtcarsaes(x = mpg, y = drat)) +
2    geom_point(aes(size = wt, colour = gear))
3)
4

  • legend .box

可以看到两个legend默认垂直排列。如果想修改他们的排列方式,则可以使用legend.box函数。

1plot2 +
2  theme(legend.box = 'horizontal')

  • legend.box.just

当有多个legend的时候,可以选择如何对其他们,使用legend.box.just函数。

1##两个legend水平排列,并且底部对齐
2plot2 +
3  theme(legend.box = 'horizontal',
4        legend.box.just = 'bottom')

  • legend.box.margin

该函数用来设置所有legend的周围的距离。该函数需要和margin函数配合使用。

1plot2 +
2  theme(legend.box.margin = margin(5555'cm'))

  • legend.box.background

该函数用来设置两个legend的背景,与其他background系列函数一样,与element_blankelement_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.box.spacing

该函数用来控制legend和画图区域之间的距离。配合unit函数使用。

1plot2 +
2  theme(legend.box.spacing = unit(7'cm'))

  1. legend.key系列函数

该系列函数用来控制legend的每个元素的内容

  • legend.key

element_blankelement_rect配合使用,控制每个key的背景。

1plot +
2  theme(legend.key = element_rect(fill = 'red', colour = 'blue', size = 2, linetype = 2))

  • legend.key.size,legend.key.widthlegend.key.height

控制legend key的大小(与unit函数配合使用),宽度和高度。比如点的大小等等。

1plot +
2  theme(legend.key.size = unit(3'cm'))

  1. legend.margin

控制legend和边缘的距离。和margin函数配合使用。

1plot +
2  theme(legend.margin = margin(3,3,3,3'cm'))

  1. legend.spacing系列函数

控制legend各个元素之间的距离。

1plot +
2  theme(legend.position = 'bottom', legend.spacing.x = unit(1'cm'))

  1. 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))

  1. legend.title

控制legend title的外观。与element_blank或者element_rect函数配合使用。

  1. legend.positionlegend.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'))

  1. legend.direction

控制legend水平或者垂直展示。


guides函数

另外一个能够控制legend的函数为guides函数。guides函数

  1. fillcoloursize等参数

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显示列数或者行数:ncolncol,label逆序排列:reverse

因为guides函数主要就是用来设置legend的,所以推荐能够在其中设置的都在这里面设置,而不能够的,再在其他函数中设置。


scale_系列函数

在每个scale_系列函数中,都保留了guide参数,可以和guide_colourbar()或者guide_legend()联合使用,实现和guides函数的功能。同样的,因为其中已经有很多参数了,所以不建议在这进行设置。scale_系列函数可以对legend做一些其他无法进行的修改。

  1. limits参数

该参数用于连续变量,可以设置连续变量的范围,而用于非连续变量,则可以用来选择显示哪些变量。

1plot2 +
2  scale_colour_discrete(limits = c('3''4')) +
3  scale_size_continuous(limits = c(34))

  1. label参数

该参数可以和limits参数配合使用用来修改legend的顺序和文字。

1plot2 +
2  scale_colour_discrete(limits = c('4''3'), label = c('Four''Threee')) 

------------------------------------------------------------------------

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多