1、ggplot

  • geom_text()通过交代文本的坐标位置与内容绘制,通常与点图联用。相关参数包括:
    • color 标签的颜色
    • alpha 标签的透明度
    • check_overlap 若有重叠的标签则不显示,默认为False
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
library(tidyverse)
library(patchwork)

p = ggplot(mpg, aes(displ, hwy)) + geom_point()
# 设置候选标签
best_in_class <- mpg %>%
  group_by(class) %>%
  filter(row_number(desc(hwy)) == 1)

# nudge_x / nudge_y:设置标签的相对位置,移动单位与x/y轴匹配;大于0分别表示右、上
# hjust / vjust:设置标签的相对位置,移动单位与自身长宽匹配;小于0分别表示右,上
p1 = p + geom_text(aes(label = model), data = best_in_class)
p2 = p + geom_text(aes(label = model), data = best_in_class,
                   nudge_x = 1, nudge_y = 10)
p1 | p2
image-20230311204246511
  • geom_label()在上述的基础上设置文本框,相关参数包括:
    • label.size:框轮廓线的宽度
    • label.r:框轮廓的平滑度
    • label.padding:框的大小
    • alpha:框的透明度
1
2
3
4
p1 = p + geom_label(aes(label = model), data = best_in_class)
p2 = p + geom_label(aes(label = model), data = best_in_class,
                    alpha=0.5, fill="grey", color="red")
p1 | p2
image-20230311205024367

2、ggrepel

上述函数对于重叠标签的处理能力有限,ggrepel包可对此进行有效的补充。简单理解就是确定文本标签的坐标后,对于存在互相重叠的标签进行适当偏移,使各自均能完整的显示。

  • geom_text_repel,部分参数与上相同
    • max.overlaps:所允许的最多重叠数,若超过则显示
    • box.padding:可以理解为设置标签与给定坐标的相对位置
    • min.segment.length:在超过此长度后才显示连接线段
    • arrow:设置箭头
1
2
3
4
5
6
library(ggrepel)
p1 = p + geom_text_repel(aes(label = model), data = best_in_class)
p2 = p + geom_text_repel(aes(label = model), data = best_in_class,
                         box.padding = 2, min.segment.length = 2,
                         arrow = arrow(length = unit(0.01, "npc")))
p1 | p2
image-20230311210331372
  • geom_label_repel(), 用法与上述基本一致
    • label.padding可以设置文本框的大小
image-20230311210613740