简体   繁体   English

ggplot 多个箱线图和 stat_summary position

[英]ggplot multiple boxplots and stat_summary position

I have the following code.我有以下代码。 I'd like to change the color of the boxplots so they all have the same fill color (grey).我想更改箱线图的颜色,使它们都具有相同的填充颜色(灰色)。 Also I'd like to have the stat_summary texts to stick to the bottom of each barplot but vjust only seem to provide relative position?另外我想让 stat_summary 文本贴在每个条形图的底部,但似乎只提供相对的 position?

Thanks谢谢

boxp <- ggplot(mtcars, aes(as.factor(cyl), wt, fill=as.factor(am)) ) +
  geom_bar(position = "dodge", stat = "summary", fun.y = "median") +
  geom_boxplot(outlier.shape = NA, width=0.2, color = "black", position = position_dodge(0.9)) +
  stat_summary(aes(label=round(..y..,2)), fun.y=median, geom="text", size=8, col = "white", vjust=8, position = position_dodge(0.9)) +
  stat_summary(fun.y=mean, geom="point", shape=18, size=4, col="white", position = position_dodge(0.9)) +
  labs(x = "Conditions", y = "Medians") +
  scale_y_continuous(limits=c(0,7),oob = rescale_none) +
  theme_bw()
boxp

在此处输入图像描述

Here is a possible solution, but it needs ggplot v3.3.0 for the stage() function.这是一个可能的解决方案,但它需要 ggplot v3.3.0 用于stage() function。

To point out major changes:指出主要变化:

  • Instead of using the fill as an implicit grouping, I've explicitly set the grouping so it isn't tied to the fill.我没有将填充用作隐式分组,而是明确设置了分组,因此它不与填充相关联。
  • I added the fill as an aesthetic of the bar geom.我添加了填充作为条形几何的美学。
  • The boxplot now has the unmapped aesthetic fill = 'gray'箱线图现在具有未映射的美学fill = 'gray'
  • The text stat summary uses stage() to calculate the statistic but then uses 0 as actual placement.文本统计摘要使用stage()计算统计信息,但随后使用0作为实际位置。
library(ggplot2)
library(scales)

ggplot(mtcars, aes(as.factor(cyl), wt,
                   group = interaction(as.factor(cyl), as.factor(am)))) +
  geom_bar(aes(fill=as.factor(am)), position = "dodge", stat = "summary", fun = "median") +
  geom_boxplot(outlier.shape = NA, width=0.2, 
               color = "black", fill = 'gray',
               position = position_dodge(0.9)) +
  stat_summary(aes(label=round(after_stat(y), 2), y = stage(wt, after_stat = 0)), 
               fun=median, geom="text", size=8, col = "white", vjust=-0.5,
               position = position_dodge(0.9)) +
  stat_summary(fun=mean, geom="point", shape=18, size=4, col="white", position = position_dodge(0.9)) +
  labs(x = "Conditions", y = "Medians") +
  scale_y_continuous(limits=c(0,7),oob = rescale_none) +
  theme_bw()

Created on 2020-05-06 by the reprex package (v0.3.0)代表 package (v0.3.0) 于 2020 年 5 月 6 日创建

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

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