繁体   English   中英

如何插入两个条形之间的差异ggplot2

[英]How to insert the difference between two bars ggplot2

我做了这个代码:

    ggplot(data = df, aes(x = sex,y = weight, fill=sex))+
  geom_bar(position="dodge", stat="summary",width = 0.3) +theme_classic() +
  scale_y_continuous(breaks = round(seq(min(0), max(400), by = 50), digits=2),limits=c(0,400)) +
  labs(x = element_blank(),y="Weight (kg)") + 
  labs( title= "Weight") + 
  scale_fill_manual(values = c("red", "black")) +
  theme (plot.title=element_text( hjust=0.5, vjust=0.5, face='bold'),axis.text.x=element_text(size = 10),axis.text.y=element_text(size = 9),
         axis.title.y = element_text(size = 12),legend.position = "none",
         axis.title.x = element_text(size = 12))

我得到了这个情节:

在此处输入图片说明

但我想插入这两个条形之间的差异,类似于或类似于:

在此处输入图片说明

我使用了这个数据集:

set.seed(1234)
top <- data.frame(
  sex=factor(rep(c("Male","Female"), each=200)),
  weight=round(c(rnorm(200, mean=350, sd=5),
                 rnorm(200, mean=300, sd=5)))
)

这不完全是您想要的,但它是一种选择。 我们可以使用aggregate计算均值,找到两个值之间的差异,然后将其作为geom_text标签放在具有较低alpha的新geom_bar

set.seed(1234)
df <- data.frame(
  sex=factor(rep(c("Male","Female"), each=200)),
  weight=round(c(rnorm(200, mean=350, sd=5),
             rnorm(200, mean=300, sd=5))))


gender_means <- aggregate(df$weight, by=list(df$sex), mean)
mean_difference <- gender_means[[2]][[2]] - gender_means[[2]][[1]]

ggplot(data = df, aes(x = sex,y = weight, fill=sex))+
    geom_bar(position="dodge", stat="summary",width = 0.3) +theme_classic() +
    scale_y_continuous(breaks = round(seq(min(0), max(400), by = 50), digits=2),limits=c(0,400)) +
    labs(x = element_blank(),y="Weight (kg)") + 
    labs( title= "Weight") + 
    scale_fill_manual(values = c("red", "black")) +
    theme (plot.title=element_text( hjust=0.5, vjust=0.5, face='bold'),axis.text.x=element_text(size = 10),axis.text.y=element_text(size = 9), axis.title.y = element_text(size = 12),legend.position = "none", axis.title.x = element_text(size = 12)) + 
    geom_bar(aes(x=sex,y=gender_means[[2]][[2]]),stat="identity",alpha=0.5,width=0.3) + 
    geom_text(aes(x=sex,y=gender_means[[2]][[2]],label=ifelse(sex=="Female",paste0("Difference = ",mean_difference," kg"),"")), vjust=2.2, size=3.4)

图形

暂无
暂无

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

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