r - 使用 R 中的 geom_label_repel 将标签放在前面,将领导者放在后面
问题描述
这里是新的,对 R 来说是半新的,所以希望我能正确地提出这个问题。
我有看起来像这样的数据(最后的完整数据集):
Peak Length Height Class Label
Peak 16 16.542 1128.60 Class 2 Peak 16
Peak 10 16.592 74909.84 Class 4 Peak 10
Peak 6 16.930 21747.10 Class 2 Peak 6
Peak 9 17.177 98380.79 Class 2 Peak 9
Peak 20 17.235 168036.36 Class 4 Peak 20
Peak 11 17.264 85770.79 Class 5 Peak 11
我正在制作一个带有标签的情节geom_label_repel
,代码如下:
library(ggplot)
library(ggrepel)
ggplot(data = df, aes(x = Length, y = Height, color = Class)) +
geom_col()+
geom_label_repel(aes(label = Label),
fill = "white",
color = "black",
nudge_x = 0.2,
force= 2,
segment.alpha = 0.5)
结果图很好,但我试图找出一种方法来确保峰值标签最终出现在任何引导线的前面。
也许您可以看到“Peak 17”标签与“Peak 3”的引导线重叠。我使用了 nudge_x、nudge_y 和 force 来移动标签,但我的完整数据集有更多的峰值和标签,所以我总是以标签上的领导者告终。
任何帮助将不胜感激,很高兴我找到了这个网站!
完整数据:
df <- structure(list(Peak = structure(c(8L, 2L, 18L, 21L, 13L, 3L,
1L, 4L, 14L, 6L, 17L, 16L, 12L, 5L, 7L, 10L, 9L, 15L, 20L, 5L,
11L, 19L), .Label = c("Peak 1", "Peak 10", "Peak 11", "Peak 12",
"Peak 13", "Peak 14", "Peak 15", "Peak 16", "Peak 17", "Peak 18",
"Peak 19", "Peak 2", "Peak 20", "Peak 21", "Peak 3", "Peak 4",
"Peak 5", "Peak 6", "Peak 7", "Peak 8", "Peak 9"), class = "factor"),
Length = c(16.542, 16.592, 16.93, 17.177, 17.235, 17.264,
12.065, 12.33, 12.478, 13.844, 13.848, 14.565, 14.836, 14.903,
15.425, 15.789, 16.542, 16.592, 16.93, 17.177, 17.235, 17.264
), Height = c(1128.6, 74909.84, 21747.1, 98380.79, 168036.36,
85770.79, 77156.06, 204716.44, 146063.31, 126574.23, 387495.94,
407584.38, 103778.66, 134615.45, 166271.98, 35626.38, 8076.28,
14417.26, 6311.36, 1578.34, 408.42, 2920.28), Class = structure(c(2L,
4L, 2L, 2L, 4L, 5L, 1L, 3L, 5L, 5L, 2L, 2L, 1L, 5L, 3L, 5L,
5L, 1L, 3L, 5L, 3L, 3L), .Label = c("Class 1", "Class 2",
"Class 3", "Class 4", "Class 5"), class = "factor"), Label = structure(c(8L,
2L, 18L, 21L, 13L, 3L, 1L, 4L, 14L, 6L, 17L, 16L, 12L, 5L,
7L, 10L, 9L, 15L, 20L, 5L, 11L, 19L), .Label = c("Peak 1",
"Peak 10", "Peak 11", "Peak 12", "Peak 13", "Peak 14", "Peak 15",
"Peak 16", "Peak 17", "Peak 18", "Peak 19", "Peak 2", "Peak 20",
"Peak 21", "Peak 3", "Peak 4", "Peak 5", "Peak 6", "Peak 7",
"Peak 8", "Peak 9"), class = "factor")), class = "data.frame", row.names = c(NA,
-22L))
解决方案
看看这对你有用吗?
ggplot(data = df,
aes(x = Length, y = Height, label = Label)) +
# segment layer (alpha = 1 for segment & 0 for label)
geom_label_repel(nudge_x = 0.2, force = 2,
segment.alpha = 1, alpha = 0,
seed = 555) +
# barchart layer sandwiched in between
geom_col(aes(color = Class)) +
# label layer (alpha = 0 for segment & 1 for label, same seed as before)
geom_label_repel(nudge_x = 0.2, force = 2,
segment.alpha = 0, alpha = 1,
seed = 555)
推荐阅读
- python - python GUI 的数量不匹配
- oracle - 如何通过为Oracle中的表中的每条记录添加1000来更新列?
- sql - SQL - 为什么我的查询返回所有可能的排列?
- c# - 在 .net core 3.1 中将 PipeSecurity 选项添加到 NamedPipeServerStream 构造函数
- python - TensorFlow 只看到 cpu
- c++ - Visual Studio 2019 Linux 平台 ARM 构建输出 x86-64 二进制文件
- python - 在 python 中,如何使用 path/map 访问和更新 JSON 的特定属性可作为字符串使用
- android - 安卓 | 如何制作类似于 foodpanda 详情页的 UI
- c++ - 如何获取windows的系统路径?
- javascript - 带有 babel-loader 的 Webpack 无法解析反应功能组件