首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ggrepel:结合使用position_dodge和geom_label_repel

ggrepel:结合使用position_dodge和geom_label_repel
EN

Stack Overflow用户
提问于 2018-11-19 14:58:58
回答 1查看 1.3K关注 0票数 5

我正在尝试使用geom_boxplot来标记ggrepel::geom_label_repel中的异常值。当只有一个分组变量时,它很好地工作,但是当我尝试多个分组变量时,我遇到了一个问题。ggrepel中的立场论点由于某些原因似乎不太一致,请参见下面的示例:

代码语言:javascript
复制
library(tidyverse)
library(ggrepel)

set.seed(1337)

df <- tibble(x = rnorm(500),
             g1 = factor(sample(c('A','B'), 500, replace = TRUE)),
             g2 = factor(sample(c('A','B'), 500, replace = TRUE)),
             rownames = 1:500)

is_outlier <- function(x) {
    return(x < quantile(x, 0.25) - 1.5 * IQR(x) | x > quantile(x, 0.75) + 1.5 * IQR(x))
}

df_outliers <- df %>% group_by(g1, g2) %>% mutate(outlier=is_outlier(x))

ggplot(df_outliers, aes(x=g1, y=x, fill=g2)) + 
    geom_boxplot(width=0.3, position = position_dodge(0.5)) +
    ggrepel::geom_label_repel(data=. %>% filter(outlier), 
                              aes(label=rownames), position = position_dodge(0.8))

有没有办法让标签用ggrepel指向所附的点?

EN

回答 1

Stack Overflow用户

发布于 2019-01-16 06:30:59

你可以试试这个:

代码语言:javascript
复制
ggplot(df_outliers, 
       aes(x=g1, y=x, fill=g2, label=rownames)) + 
  geom_boxplot(width = 0.3, position = position_dodge(0.5)) +
  geom_label_repel(data = . %>%
                     filter(outlier) %>%
                     group_by(g1) %>%
                     complete(g2, fill = list(x = 0, rownames = "")),
                   position = position_dodge(0.5),
                   box.padding = 1,
                   min.segment.length = 0,
                   show.legend = FALSE)

解释:

  1. geom_label_repel()的数据源遵循aosmith的建议,添加but组合,为x填充0 (只要它不是默认的NA)和行名的"" (ggrepel不会绘制空标签,但在躲避时会考虑到它们)。
  2. box.padding设置为1(从默认的0.25增加),以进一步推开标签,从而使线段更加可见。
  3. min.segment.length设置为0(从默认的0.5降为0),以强制绘制线段,不管它们有多短。

(show.legend = FALSE是可选的。我只是不喜欢看到传说中出现的“一个”字母。

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

https://stackoverflow.com/questions/53377299

复制
相关文章

相似问题

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