ggplot2分组箱线图添加均值

一、不分组的简单箱线图加均值

代码如下(示例):

# Library
library(ggplot2)

# create data
names=c(rep("A", 20) , rep("B", 8) , rep("C", 30), rep("D", 80))
value=c( sample(2:5, 20 , replace=T) , sample(4:10, 8 , replace=T), sample(1:7, 30 , replace=T), sample(3:8, 80 , replace=T) )
data=data.frame(names,value)

# plot
p <- ggplot(data, aes(x=names, y=value, fill=names)) +
  geom_boxplot(alpha=0.7) +
  stat_summary(fun="mean", geom="point", shape=20, size=2.5, color="red", fill="red",alpha=0.7) +
  theme(legend.position="none") +
  scale_fill_brewer(palette="Accent")
p

在这里插入图片描述

stat_summary

用到了stat_summary函数算均值,具体介绍一下

代码如下(示例):(图片略,直接跑可以跑出来)

library(tidyverse)
library(gapminder)
#----------------------
gapminder %>% 
  ggplot(aes(x = year, y = lifeExp)) + 
  stat_summary(fun = "mean", geom = "point") + #对lifeExp求平均,用点点显示
  stat_summary(fun = "mean", geom = "line") #对lifeExp求平均,用线显示

#----------------------
gapminder %>% 
  ggplot(aes(x = year, y = lifeExp)) +
  stat_summary(fun = "median", geom = "bar")#对lifeExp求中位数,用bar显示

#----------------------
gapminder %>% 
  mutate(year = as.integer(year)) %>% 
  ggplot(aes(x = year, y = lifeExp)) +
  stat_summary(fun = "mean", geom = "area",#对lifeExp求平均,用面积覆盖显示
               fill = "#EB5286",
               alpha = .5) +
  stat_summary(fun = "mean", geom = "point",#对lifeExp求平均,用点点显示
               color = "#6F213F") 

#----------------------

gapminder %>% 
  ggplot(aes(x = year, y = lifeExp)) +
  stat_summary(fun = "mean", #点是均值
               geom = "pointrange",#点和范围线
               fun.min = min,#对应范围是最大值和最小值
               fun.max = max)

#----------------------

gapminder %>% 
  ggplot(aes(x = year, y = lifeExp)) +
  stat_summary(geom = "errorbar",#使用经典的误差线来显示最大值和最小值
               width = 1,#fun缺省
               fun.min = min,
               fun.max = max)

#----------------------
gapminder %>% 
  ggplot(aes(x = year, y = lifeExp)) +
  stat_summary(fun =" mean",
               geom = "pointrange",
               fun.max = function(x) mean(x) + sd(x),
               fun.min = function(x) mean(x) - sd(x))

   #fun.data="mean_sd"在ggpubr包里
gapminder %>% 
  ggplot(aes(x = year, y = lifeExp)) +
  stat_summary(fun.data = "mean_sd",geom = "pointrange")
   #以上两种作用是一样的

gapminder %>% 
  ggplot(aes(x = year, y = lifeExp)) +
  stat_summary(fun="mean",geom="bar")+
  stat_summary(fun.data = "mean_sd",geom = "errorbar",color="red")


#----------------------
    #标准差
gapminder %>% 
  ggplot(aes(x = year, y = lifeExp)) +
  stat_summary(fun = "mean",
               geom = "pointrange",
               fun.max = function(x) mean(x) + sd(x) / sqrt(length(x)),
               fun.min = function(x) mean(x) - sd(x) / sqrt(length(x)))

#----------------------
library(Hmisc)
gapminder %>% 
  ggplot(aes(x = year, y = lifeExp)) +
  stat_summary(fun.data = "mean_cl_normal",#置信区间
               fun.args = list(conf.int = .99))#设置是99%质心区间

    #置信区间的误差线
gapminder %>% 
  ggplot(aes(x = year, y = lifeExp)) +
  stat_summary(fun.data = "mean_cl_normal",
               geom = "errorbar",
               width = .4) +
  stat_summary(fun = "mean", geom = "point")

#----------------------
    #均值加置信区间
gapminder %>% 
  filter(year == 2007) %>% 
  ggplot(aes(x = continent, y = lifeExp)) +
  stat_summary(fun = "mean", geom = "bar", alpha = .7) +
  stat_summary(fun = "mean", geom = "point", 
               size = 1) +
  stat_summary(fun.data = "mean_cl_normal",
               geom = "errorbar",
               width = .2) 

#----------------------
    #用mean_cl_bool对mpg进行运算,返回均值,最大值,最小值3个向量组成的矩阵
#----------------------
    #position = position_dodge( )并排显示多个条形图
    #第一幅图的绘图命令中用到了参数position="dodge",第二幅图的绘图命令中用到的参数是position=position_dodge()。
    #这是因为position="dodge"是参数默认为0.9position_dodge()的简写。当我们需要单独指定该参数的时候,必须输入完整的命令。
colors <-c("#E41A1C","#1E90FF","#FF8C00","#4DAF4A","#984EA3",
           "#40E0D0","#FFC0CB","#00BFFF","#FFDEAD","#90EE90",
           "#EE82EE","#00FFFF","#F0A3FF", "#0075DC", 
           "#993F00","#4C005C","#2BCE48","#FFCC99",
           "#808080","#94FFB5","#8F7C00","#9DCC00",
           "#C20088","#003380","#FFA405","#FFA8BB",
           "#426600","#FF0010","#5EF1F2","#00998F",
           "#740AFF","#990000","#FFFF00")
gapminder %>% 
  mutate(
    year = as.factor(year)
  ) %>%
  ggplot(aes(x = continent, y = lifeExp, fill = year)) +
  stat_summary(fun = "mean", geom = "bar", 
               alpha = .7, position = position_dodge(0.95)) +#组间的距离
  stat_summary(fun = "mean", geom = "point", 
               position = position_dodge(0.95),
               size = 1) +
  stat_summary(fun.data = "mean_cl_normal",
               geom = "errorbar",
               position = position_dodge(0.95),
               width = .2) +
  scale_fill_manual(values = colors)+ ###这个可以这样子改颜色!!!
  theme_minimal()+ #去掉黑背景还蛮好看
  scale_y_continuous(expand=c(0,5))+scale_x_discrete(expand=c(0.2,0))
    #离散型scale_y_discrete 或者scale_x_discrete就是用于更改坐标轴两边的留白的

参考: 通过ggplot2中stat_summary函数快速进行数据统计.

以及 stat_summary.


分组箱线图

所需数据格式(长数据)在这里插入图片描述


p1 <- ggplot(baidata, aes(x=组别, y=, fill=组别)) + 
  facet_wrap(~状态)+ labs (y="白细胞")+ #分面按照基线7天14天
  ggtitle("不同组别不同时间点白细胞变化") +
  theme(plot.title = element_text(hjust = 0.5,size = 10)) + 
  scale_fill_manual(values=c("lightgoldenrod1","lavender"))+
  geom_boxplot( color="azure4",outlier.colour="red",
                outlier.fill="red",outlier.size=1,outlier.alpha=0#notch=TRUE,notchwidth = 0.8
  )+ theme(text = element_text(family = "wqy-microhei"))

#outlier.alpha=0异常值透明度为0,就是不显示异常值

p1

p1+stat_summary(fun=mean,geom="point",color="red",alpha=0.5,size=1)

在这里插入图片描述