ggplot2 | 注释函数

本篇推文来介绍图形的注释功能。在基础绘图系统中,注释功能主要由次级函数来实现,如text()函数可以添加文本、mtext()函数添加轴标签、segments()添加短线、arrows()函数添加箭头、rect()函数添加矩形等。而在ggplot2绘图系统中,一方面可以使用一些几何图形函数、统计变换函数充当注释函数,另一方面它还有专门的注释函数annotate()

library(ggplot2)
library(patchwork)

p <- ggplot(mtcars, aes(x = wt, y = mpg, col = vs)) +
  geom_point() + theme_bw() +
  theme(legend.position = "none",
        axis.text = element_text(size = 15),
        axis.title = element_text(size = 18))
p

1 文本注释

文本注释是比较常用的注释方法。

1.1 geom_text()

geom_text()函数的功能类似于基础绘图系统的text()函数,它属于gpglot2绘图系统中的几何图形函数,遵循该类函数的使用规则。语法结构如下:

geom_text(
  mapping = NULL,
  data = NULL,
  stat = "identity",
  position = "identity",
  ...,
  parse = FALSE,
  nudge_x = 0,
  nudge_y = 0,
  check_overlap = FALSE,
  na.rm = FALSE,
  show.legend = NA,
  inherit.aes = TRUE
)
  • mapping:映射参数;

  • data:映射变量所在的数据框,默认使用全局数据框。

geom_text()函数可用于映射的美学参数(aesthetics):x、y、label、alpha、angle、colour、family、fontface、group、hjust、lineheight、size、vjust;其中label为必须参数。

p + geom_text(aes(label = vs, vjust = 1, hjust = "outward"))
  • parse:逻辑型参数;若设为TRUE,则label参数的内容遵循plotmath的编译规则,具体见推文grDevices | 如何在图形中使用数学表达式作为标注文本

  • nudge_x、nudge_y:偏移量;与vjusthjust参数不同的是,它的单位和对应坐标轴的刻度相同;

  • check_overlap:逻辑型参数;若设为TRUE,则重叠的文本注释会被去除。

p + geom_text(aes(label = vs, vjust = 1, hjust = "outward"),
              check_overlap = T)

1.2 geom_label()

geom_label()函数也可以添加文本作为注释,但效果与geom_text()函数不同。它的语法结构如下:

geom_label(
  mapping = NULL,
  data = NULL,
  stat = "identity",
  position = "identity",
  ...,
  parse = FALSE,
  nudge_x = 0,
  nudge_y = 0,
  label.padding = unit(0.25, "lines"),
  label.r = unit(0.15, "lines"),
  label.size = 0.25,
  na.rm = FALSE,
  show.legend = NA,
  inherit.aes = TRUE
)

示例如下:

p + geom_label(aes(label = vs), nudge_x = 0.25)
  • label.padding:标签文本与外框的距离大小;

  • label.r:外框圆角的半径;

  • label.size:外框线条的尺寸,单位为毫米(mm)。

p + geom_label(aes(label = vs), nudge_x = 0.15,
               label.padding = unit(0.1, "lines"),
               label.r = unit(0.05, "lines"),
               label.size = 0.1)

2 annotate()

annotate()函数的语法结构如下:

annotate(
  geom,
  x = NULL,
  y = NULL,
  xmin = NULL,
  xmax = NULL,
  ymin = NULL,
  ymax = NULL,
  xend = NULL,
  yend = NULL,
  ...,
  na.rm = FALSE
)

annotate()函数可以通过geom参数调用相关的几何图形函数的绘图效果,并将控制绘图区域的参数统一命名为x、y、xmin、xmax、ymin、ymax、xend、yend,...表示针对几何图形函数的特殊参数。

比如,文本注释大多数情况下并需要针对所有点进行,这时使用annotate()函数要比geom_text()geom_label()函数快捷、方便的多:

p1 <- p + annotate("text", x = c(2, 5), y = c(15, 25),
                   label = c("标签1", "标签2"))
p2 <- p + annotate("label", x = c(2, 5), y = c(15, 25),
                   label = c("标签1", "标签2"))

p1 + p2

调用geom_rect()函数的绘图功能:

p + annotate("rect", xmin = 2.5, xmax = 3.5,
             ymin = 15, ymax = 25,
             alpha = 0.3)

多种注释进行组合:

p + annotate("rect", xmin = 2.5, xmax = 3.5,
             ymin = 15, ymax = 25,
             alpha = 0.3) +
  annotate("segment", x = 3.5, xend = 4, y = 25, yend = 30) +
  annotate("label", x = 4, y = 30, label = "注释")

3 annotation_函数

3.1 annotation_custom()

该函数通过嵌套其他图形来为图形做注释,它的语法结构如下:

annotation_custom(
  grob,
  xmin = -Inf, xmax = Inf,
  ymin = -Inf, ymax = Inf)
  • grob:作为嵌套的图形;

  • xmin、xmax、ymin、ymax:嵌套图形放置的区域。

嵌套图形需要先使用ggplot2绘图系统进行绘制,再使用ggplotGrob()函数进行封装。

g <- ggplot(mtcars, aes(x = factor(cyl))) + geom_bar() +
  theme_bw() + scale_x_discrete(name = "cyl")
g <- ggplotGrob(g)

p + annotation_custom(g, xmin = 3.5, xmax = 5.5,
             ymin = 20, ymax = 35)

3.2 annotation_logticks()

该函数为图形的坐标轴添加对数刻度线。语法结构如下:

annotation_logticks(
  base = 10,
  sides = "bl",
  outside = FALSE,
  scaled = TRUE,
  short = unit(0.1, "cm"),
  mid = unit(0.2, "cm"),
  long = unit(0.3, "cm"),
  colour = "black",
  size = 0.5,
  linetype = 1,
  alpha = 1,
  color = NULL,
  ...
)
  • base:对数底数;

  • sides:对数刻度出现的位置;t、b、l、r分别表示上、下、左、右坐标轴,可使用字符串进行任意组合。

p + annotation_logticks(sides = "bt")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值