ggplot2 | 图例(Ⅰ):图例函数、主题函数中的图例参数
本篇是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 | 图例(Ⅰ):图例函数、主题函数中的图例参数相关推荐
- MATLAB中标注图例
当在一幅图中出现多种图形中,用户可以根据自己的需要,利用legeng命令对不同的图例进行说明.它的使用格式如下: 调用格式 ...
- python中的array函数作用_Python中的Array | 数组2(简介和功能)
相关文章:Python中的数组Array | 1(简介和功能) 以下是更多函数. 1. typecode:此函数返回初始化数组所用的数据类型. 2. itemsize:此函数返回单个数组元素的大小(以 ...
- R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置、图例标题、键值、文本字体大小(title、text、key)、颜色标识的大小、点形状pch的大小
R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置.图例标题.键值.文本字体大小(title.text.key).颜色标识的大小.点形状pch的大小 目录
- R语言可视化密度图并在密度图中嵌入图例信息、使用geomtextpath包的geom_textdensity函数,将图例(legend)信息嵌入到密度图中
R语言可视化密度图并在密度图中嵌入图例信息.使用geomtextpath包的geom_textdensity函数,将图例(legend)信息嵌入到密度图中(Density plot with dire ...
- R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(改变图例位置)实战(dot plot)
R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(改变图例位置)实战(dot plot) 目录 R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(改变图例位 ...
- R语言ggplot2可视化为组合图添加综合图例实战:使用ggpubr包ggarrange函数实现综合图例、使用patchwork包实现综合图例
R语言ggplot2可视化为组合图添加综合图例实战:使用ggpubr包ggarrange函数实现综合图例.使用patchwork包实现综合图例 目录
- ggplot2中显示坐标轴_R可视化08|ggplot2图层标度图层(scale layer)图例篇
"pythonic生物人"的第106篇分享 本文详细介绍ggplot2中图例标度(legends scales),续前篇 R可视化07|ggplot2图层-标度图层(scale l ...
- R语言ggplot2可视化:使用geom_line函数将dataframe中数据可视化为时间序列(或折线图)(Time Series Plot From a Data Frame)、添加标题、副标题
R语言ggplot2可视化:使用geom_line函数将dataframe中数据可视化为时间序列(或折线图)(Time Series Plot From a Data Frame).添加标题.副标题. ...
- 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)) ...
最新文章
- 磁盘管理命令:du df
- html图片展示不间隙,求助大神 如让图片展示在li标签里面,不要间隙 谢谢
- oracle强制切换redolog组
- Git之submodule使用总结
- 将字符串编码成 GBK
- python编程快速上手第三章_Python编程快速上手 往让繁琐工作自动化-6.6 习题(示例代码)...
- 再接再厉!Alphabet将携手更多汽车厂商测试无人驾驶
- python数据科学库_Python数据科学库
- 2013年全国大学生电子设计竞赛C题-旋转倒立摆
- 定制开发 app 的好处都有哪些?
- PL/SQL通过 scan ip 连接数据库
- 微软必应词典客户端的案例分析——个人Week3作业
- L2-1 特立独行的幸福 (25分)
- 压力单位PSI,PSIG, PSIA的区别
- 移动手机消息推送机制
- 【电力电子】【2011.09】30kW距离扩展器的双向三相变换器设计与实现
- centos7 oracle 11.2静默安装
- 【前端】HTML详细教程(上篇)
- 我们处于大数据时代,数据是从哪里来的?
- Duplicate File Finder for Mac(重复文件查找工具)
热门文章
- Java Web学习总结(43)—— Restful API 版本控制
- Java Web学习总结(33)——Java Web 程序员如何转型大数据
- harbor 多端口_总结—Harbor仓库部署和使用问题集锦
- java 静态代码块有什么用,java编程开发静态代码块的使用方法都有哪些
- 状态服务器与无状态服务器(要点)
- 十进制转任意进制-数论
- “攻击WPS样本”实为敲诈者
- 【转】【真正福利】成为专业程序员路上用到的各种优秀资料、神器及框架
- SQL点滴35—SQL语句中的exists
- ORA-02291: 违反完整约束条件 …… - 未找到父项关键字