堆叠柱状图也要做统计-标记显著性
写在前面
有时候我们展示的指标有一定的关系,希望可以使用堆叠柱状图展示。许多朋友们问询,这样如何添加显著性标记,因此本期结合EasyStat包给大家做一个演示。
R 包导入
## 导入包
library(ggplot2)
library(reshape2)
library(plyr)
library(EasyStat)
library(dplyr)
使用数据
这里只需要修改使用哪几列数据即可,我们EasyStat内置数据,选择了三列数据大小为同一个水平的来做一下。(模拟)
data("data_wt")
## 载入数据
data <- data_wt
i = c(4,9,8)
### 数据整理
如果按照EasyStat的输入,也就是第一列是ID,第二列为:group,那么下面数据整理的过程是不需要修改的,直接运行。#--数据整理
i = c(1,2,i)
data <- data[,i]
#---差异统计
result = MuiKwWlx(data = data,num = c(3:ncol(data)))
result
result$group = row.names(result)
abc <- melt(result, id="group", variable.name="variable", value.name = "abc")
#作图数据整理
df <- melt(data, id="group", variable.name="variable", value.name = "Size")
head(df)
## 数据统计均值、标准差、标准误
mean <- aggregate(df$Size, by=list(df$group, df$variable), FUN=mean)
sd <- aggregate(df$Size, by=list(df$group, df$variable), FUN=sd)
len <- aggregate(df$Size, by=list(df$group, df$variable), FUN=length)
df_res <- data.frame(mean, sd=sd$x, len=len$x)
colnames(df_res) = c("group", "variable", "Mean", "Sd", "Count")
head(df_res)
df_res$Se <- df_res$Sd/sqrt(df_res$Count) ### 计算标准差
levels(df_res $variable) = as.character(unique(df_res$variable))[c(3:1)]
大家关心的误差坐标和显著性标记坐标构造
#构造误差线坐标--
df_res = ddply(df_res,"group",transform,label_y = cumsum(Mean ))
#-构造显著性标记位置
df_res = ddply(df_res,"group", transform, label_abc = cumsum(Mean) - 0.5*Mean)
#因子重新排列
df_res$variable = factor(df_res$variable,order = F,levels = levels(df_res$variable)[length(levels(df_res$variable)):1])
合并出图数据 绘图
#--合并-出图数据
plotdata <- df_res %>%
left_join(abc,by = c("group","variable"))
### ggplot 绘图
ggplot(plotdata , aes(x= group, y=Mean, fill=variable)) +
geom_bar(stat="identity",color="black", width=.6) +
geom_errorbar(aes(ymin=label_y-Sd, ymax=label_y +Sd), width=.2) +
geom_text(aes(y = label_abc, label = abc))