本篇是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

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

  1. MATLAB中标注图例

    当在一幅图中出现多种图形中,用户可以根据自己的需要,利用legeng命令对不同的图例进行说明.它的使用格式如下: 调用格式                                       ...

  2. python中的array函数作用_Python中的Array | 数组2(简介和功能)

    相关文章:Python中的数组Array | 1(简介和功能) 以下是更多函数. 1. typecode:此函数返回初始化数组所用的数据类型. 2. itemsize:此函数返回单个数组元素的大小(以 ...

  3. R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置、图例标题、键值、文本字体大小(title、text、key)、颜色标识的大小、点形状pch的大小

    R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置.图例标题.键值.文本字体大小(title.text.key).颜色标识的大小.点形状pch的大小 目录

  4. R语言可视化密度图并在密度图中嵌入图例信息、使用geomtextpath包的geom_textdensity函数,将图例(legend)信息嵌入到密度图中

    R语言可视化密度图并在密度图中嵌入图例信息.使用geomtextpath包的geom_textdensity函数,将图例(legend)信息嵌入到密度图中(Density plot with dire ...

  5. R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(改变图例位置)实战(dot plot)

    R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(改变图例位置)实战(dot plot) 目录 R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(改变图例位 ...

  6. R语言ggplot2可视化为组合图添加综合图例实战:使用ggpubr包ggarrange函数实现综合图例、使用patchwork包实现综合图例

    R语言ggplot2可视化为组合图添加综合图例实战:使用ggpubr包ggarrange函数实现综合图例.使用patchwork包实现综合图例 目录

  7. ggplot2中显示坐标轴_R可视化08|ggplot2图层标度图层(scale layer)图例篇

    "pythonic生物人"的第106篇分享 本文详细介绍ggplot2中图例标度(legends scales),续前篇 R可视化07|ggplot2图层-标度图层(scale l ...

  8. R语言ggplot2可视化:使用geom_line函数将dataframe中数据可视化为时间序列(或折线图)(Time Series Plot From a Data Frame)、添加标题、副标题

    R语言ggplot2可视化:使用geom_line函数将dataframe中数据可视化为时间序列(或折线图)(Time Series Plot From a Data Frame).添加标题.副标题. ...

  9. R语言ggplot2可视化:使用ggfortyify包中的autoplot函数自动可视化时间序列数据(Time Series Plot From a Time Series Object (ts))

    R语言ggplot2可视化:使用ggfortyify包中的autoplot函数自动可视化时间序列数据(Time Series Plot From a Time Series Object (ts)) ...

最新文章

  1. 磁盘管理命令:du df
  2. html图片展示不间隙,求助大神 如让图片展示在li标签里面,不要间隙 谢谢
  3. oracle强制切换redolog组
  4. Git之submodule使用总结
  5. 将字符串编码成 GBK
  6. python编程快速上手第三章_Python编程快速上手 往让繁琐工作自动化-6.6 习题(示例代码)...
  7. 再接再厉!Alphabet将携手更多汽车厂商测试无人驾驶
  8. python数据科学库_Python数据科学库
  9. 2013年全国大学生电子设计竞赛C题-旋转倒立摆
  10. 定制开发 app 的好处都有哪些?
  11. PL/SQL通过 scan ip 连接数据库
  12. 微软必应词典客户端的案例分析——个人Week3作业
  13. L2-1 特立独行的幸福 (25分)
  14. 压力单位PSI,PSIG, PSIA的区别
  15. 移动手机消息推送机制
  16. 【电力电子】【2011.09】30kW距离扩展器的双向三相变换器设计与实现
  17. centos7 oracle 11.2静默安装
  18. 【前端】HTML详细教程(上篇)
  19. 我们处于大数据时代,数据是从哪里来的?
  20. Duplicate File Finder for Mac(重复文件查找工具)

热门文章

  1. Java Web学习总结(43)—— Restful API 版本控制
  2. Java Web学习总结(33)——Java Web 程序员如何转型大数据
  3. harbor 多端口_总结—Harbor仓库部署和使用问题集锦
  4. java 静态代码块有什么用,java编程开发静态代码块的使用方法都有哪些
  5. 状态服务器与无状态服务器(要点)
  6. 十进制转任意进制-数论
  7. “攻击WPS样本”实为敲诈者
  8. 【转】【真正福利】成为专业程序员路上用到的各种优秀资料、神器及框架
  9. SQL点滴35—SQL语句中的exists
  10. ORA-02291: 违反完整约束条件 …… - 未找到父项关键字