• 主页
  • 课程

    关于课程

    • 课程归档
    • 成为一名讲师
    • 讲师信息
    教学以及管理操作教程

    教学以及管理操作教程

    ¥1,000.00 ¥100.00
    阅读更多
  • 特色
    • 展示
    • 关于我们
    • 问答
  • 事件
  • 个性化
  • 博客
  • 联系
  • 站点资源
    有任何问题吗?
    (00) 123 456 789
    weinfoadmin@weinformatics.cn
    注册登录
    恒诺新知
    • 主页
    • 课程

      关于课程

      • 课程归档
      • 成为一名讲师
      • 讲师信息
      教学以及管理操作教程

      教学以及管理操作教程

      ¥1,000.00 ¥100.00
      阅读更多
    • 特色
      • 展示
      • 关于我们
      • 问答
    • 事件
    • 个性化
    • 博客
    • 联系
    • 站点资源

      未分类

      • 首页
      • 博客
      • 未分类
      • ggplot2 | 图例(Ⅰ):图例函数、主题函数中的图例参数

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

      • 发布者 weinfoadmin
      • 分类 未分类, 老俊俊的生信笔记
      • 日期 2021年9月10日
      • 评论 0评论

      感谢老俊俊的大力支持。我们会每日跟新,欢迎您关注老俊俊的生信笔记。

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



      请关注“恒诺新知”微信公众号,感谢“R语言“,”数据那些事儿“,”老俊俊的生信笔记“,”冷🈚️思“,“珞珈R”,“生信星球”的支持!

      • 分享:
      作者头像
      weinfoadmin

      上一篇文章

      ggcor 的环形热图
      2021年9月10日

      下一篇文章

      你看过 NCBI 的基因组和注释文件吗?
      2021年9月10日

      你可能也喜欢

      2-1675088548
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      30 1月, 2023
      9-1675131201
      如何快速批量修改 Git 提交记录中的用户信息
      26 1月, 2023
      5-1660909989
      scanpy官方教程2022|03-scanpy包核心绘图功能
      19 8月, 2022

      留言 取消回复

      要发表评论,您必须先登录。

      搜索

      分类

      • R语言
      • TCGA数据挖掘
      • 单细胞RNA-seq测序
      • 在线会议直播预告与回放
      • 数据分析那些事儿分类
      • 未分类
      • 生信星球
      • 老俊俊的生信笔记

      投稿培训

      免费

      alphafold2培训

      免费

      群晖配置培训

      免费

      最新博文

      Nature | 单细胞技术揭示衰老细胞与肌肉再生
      301月2023
      lncRNA和miRNA生信分析系列讲座免费视频课和课件资源包,干货满满
      301月2023
      如何快速批量修改 Git 提交记录中的用户信息
      261月2023
      logo-eduma-the-best-lms-wordpress-theme

      (00) 123 456 789

      weinfoadmin@weinformatics.cn

      恒诺新知

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      链接

      • 课程
      • 事件
      • 展示
      • 问答

      支持

      • 文档
      • 论坛
      • 语言包
      • 发行状态

      推荐

      • iHub汉语代码托管
      • iLAB耗材管理
      • WooCommerce
      • 丁香园论坛

      weinformatics 即 恒诺新知。ICP备案号:粤ICP备19129767号

      • 关于我们
      • 博客
      • 联系
      • 成为一名讲师

      要成为一名讲师吗?

      加入数以千计的演讲者获得100%课时费!

      现在开始

      用你的站点账户登录

      忘记密码?

      还不是会员? 现在注册

      注册新帐户

      已经拥有注册账户? 现在登录

      close
      会员购买 你还没有登录,请先登录
      • ¥99 VIP-1个月
      • ¥199 VIP-半年
      • ¥299 VIP-1年
      在线支付 激活码

      立即支付
      支付宝
      微信支付
      请使用 支付宝 或 微信 扫码支付
      登录
      注册|忘记密码?