繁体   English   中英

如何在ggplot中使用分组框plot将geom_text标签放置在正确的position中

[英]How to place geom_text labels in the correct position with a grouped box plot in ggplot

在这种情况下,我在 iris dataframe 中添加了一个分组变量。 我希望按物种制作一个 Sepal.Length 的箱线图,并用分组变量填充用 label 标识的异常值。 这一切都有效,但是当我尝试使用 geom_text 对异常值 label 进行打印时,它们现在确实使用分组的 position 打印,而是在中心打印。 似乎 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))

标签在中心而不是在它们各自的盒子上。 这里发生了什么?

这是由于一旦您拥有该组,就会在箱线图中躲避。 使用position_dodge显式控制它。 您可能想在 geom_text 中尝试使用hjustvjust geom_text以避免在该点上绘图。

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))

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM