如何将多个指标做嵌套柱状图

写在前面

如何使用ggplot做嵌套柱状图,其实教程很简单,主要是思维,我们如何选择这种嵌套图形来表达我们的数据。

  • 基于时间序列的逐渐降低,或者逐渐升高。

  • 数据总分形式。

    指标包含关系。

实战

使用上次代码简单修改一下,即可完成。

## 导入包
library(ggplot2)
library(reshape2)
library(RColorBrewer)
library(plyr)

## 载入数据,这里是默认的鸢尾花数据
df <- iris

head(df)

#数据宽边长
df <- melt(df, id="Species", variable.name="Attribute", value.name = "Size")
#设置出图颜色
mycol= brewer.pal(n = 12, name = "Set3")

## 数据统计均值、标准差、标准误
mean <- aggregate(df$Size, by=list(df$Species, df$Attribute), FUN=mean)
sd <- aggregate(df$Size, by=list(df$Species, df$Attribute), FUN=sd)
len <- aggregate(df$Size, by=list(df$Species, df$Attribute), FUN=length)
df_res <- data.frame(mean, sd=sd$x, len=len$x)
colnames(df_res) = c("Species", "Attribute", "Mean", "Sd", "Count")
head(df_res)
df_res$Se <- df_res$Sd/sqrt(df_res$Count) ### 计算标准差

#构造误差线坐标
df_res1 = ddply(df_res,"Attribute",transform,label_y = cumsum(Mean ))
head(df_res1)
#因子重新排列
df_res1$Species = factor(df_res$Species,levels = c("virginica","versicolor","setosa" ))

### ggplot 绘图
df_res2 =df_res1[c(1,4,7),]

p = ggplot(df_res2, aes(x=Attribute, y=Mean)) +
geom_bar(stat="identity",color="black", width=.4,fill = mycol[1] ) +
scale_fill_manual(values = mycol) +
geom_errorbar(aes(ymin=label_y-Sd, ymax=label_y +Sd), width=.1)
p

df_res3 = df_res2
df_res3$Mean = df_res3$Mean - 1.2

p = p +
geom_bar(data = df_res3, aes(x=Attribute, y=Mean),stat="identity",color="black", width=.3,fill = mycol[2]) +
geom_errorbar(data = df_res3,aes(x=Attribute, y=Mean,ymin=Mean-Sd, ymax=Mean +Sd), width=.1) +
theme_void()
p

ggsave("cs.pdf",p)

(0)

相关推荐