【问题标题】:How to place geom_text labels in the correct position with a grouped box plot in ggplot如何在ggplot中使用分组箱形图将geom_text标签放置在正确的位置
【发布时间】:2020-02-20 00:39:06
【问题描述】:

在这种情况下,我在 iris 数据框中添加了一个分组变量。我希望按物种制作 Sepal.Length 的箱线图,并由分组变量填充,并使用标签标识的异常值。这一切都有效,但是当我尝试用 geom_text 标记异常值时,它们现在确实使用分组位置打印,而是在中心打印。似乎 geom_text 没有继承全局 aes() 但我不知道为什么。

代码:

library(tidyverse)
# function to id outlier
is_outlier <- function(x) {
  return(x < quantile(x, 0.25) - 1.5 * IQR(x) | x > quantile(x, 0.75) + 1.5 * IQR(x))
}

# make a grouping variable
iris$group <- sample(1:3, nrow(iris),replace = T)

# make a outlier variable
iris <- 
  iris %>%
  group_by(Species, group) %>%
  mutate(outlier = ifelse(is_outlier(Sepal.Length), Sepal.Length, as.numeric(NA)))
iris$outlier

# graph
iris %>%
  ggplot(aes(x = Species,y = Sepal.Length, fill = factor(group))) +
  geom_boxplot() +
  geom_text(aes(label = outlier))

标签在中心而不是在它们各自的盒子上。这是怎么回事?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    这是由于一旦你有了组就在箱线图中躲避。使用position_dodge 明确控制它。您可能需要在geom_text 中尝试使用hjustvjust 参数以避免越界。

    iris %>%
      ggplot(aes(x = Species,y = Sepal.Length, fill = factor(group))) +
      geom_boxplot(position = position_dodge(width = 1)) +
      geom_text(aes(label = outlier), position = position_dodge(width = 1))
    

    【讨论】:

    • 是的,就是这样。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    • 2013-08-22
    • 2021-11-18
    • 2021-09-23
    • 2021-09-26
    • 1970-01-01
    • 2016-08-16
    相关资源
    最近更新 更多