首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R中使用geom_label_repel将标签放在前面,将引线放在后面

在R中使用geom_label_repel将标签放在前面,将引线放在后面
EN

Stack Overflow用户
提问于 2020-11-18 06:52:55
回答 1查看 219关注 0票数 5

这里是新的,R是半新的,所以我希望我能正确地组织这个问题。

我的数据看起来像这样(最后是完整的数据集):

代码语言:javascript
复制
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绘制带有标签的图,代码如下:

代码语言:javascript
复制
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来移动标签,但是我的完整数据集有更多的峰值和标签,所以我总是在标签上使用前导。

如果有任何帮助,我将不胜感激,也很高兴我找到了这个网站!

完整数据:

代码语言:javascript
复制
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))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-18 11:57:31

看看这对你有没有用?

代码语言:javascript
复制
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)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64884545

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档