该内容已被发布者删除 该内容被自由微信恢复
文章于 4月7日 下午 9:04 被检测为删除。
查看原文
被用户删除
其他

R语言绘图 | 百分比堆叠柱状图

小陈的R语言笔记 小陈的R语言笔記 2024-03-29

准备

# 加载ggplot2库  
library(ggplot2)  

# 创建一个数据集  
# specie 变量:包含四种物种的重复值  
specie <- c(rep("sorgho" , 3) , rep("poacee" , 3) , rep("banana" , 3) , rep("triticum" , 3) )  
# condition 变量:包含三种条件的重复值  
condition <- rep(c("normal" , "stress" , "Nitrogen") , 4)  
# value 变量:生成12个随机的绝对值,均值为0,标准差为15  
value <- abs(rnorm(12 , 0 , 15))  
# 将上述三个变量组合成一个数据框  
data <- data.frame(specie,condition,value)

堆叠柱状图

ggplot(data, aes(fill=condition, y=value, x=specie)) + 
  geom_bar(position="fill"stat="identity")+
  # 设置图形的标签  
  labs(x = "specie", y = "value", fill = "condition") +  
  # 手动设置填充颜色  
  scale_fill_manual(values = c("#FFA07A""#FFD700""#20B2AA")) +  
  # 使用minimal主题  
  theme_minimal()

百分比堆叠柱状图

# 计算每个物种在不同条件下的总值  
# 使用aggregate函数对数据集data按照species和condition进行分组,并对每一组的value求和  
total <- aggregate(value ~ specie + condition, data = data, FUN = sum)  

# 计算每个物种在不同条件下的百分比  
# 使用within函数更新total数据框,计算每个species在对应条件下的value所占的百分比  
total <- within(total, {  
  # 使用ave函数计算每个species的value相对于该species总值的比例  
  percentage <- ave(value, specie, FUN = function(x) x / sum(x))  
})  


ggplot(total, aes(x = specie, y = percentage, fill = condition)) +  
  # 添加条形图层,stat设置为identity表示直接使用数据框中的值  
  geom_bar(stat = "identity") +  
  # 设置图形的标签  
  labs(x = "Species", y = "Percentage", fill = "Condition") +  
  # 设置y轴为百分比格式  
  scale_y_continuous(labels = scales::percent_format()) +  
  # 手动设置填充颜色  
  scale_fill_manual(values = c("#FFA07A""#FFD700""#20B2AA")) +  
  # 使用minimal主题  
  theme_minimal()

美化

ggplot(total, aes(x = specie, y = percentage, fill = condition)) +  
  # 添加条形图层,stat设置为identity表示直接使用数据框中的值  
  geom_bar(stat = "identity", position = "stack") +  
  # 设置图形的标签  
  labs(x = "Species", y = "Percentage", fill = "Condition", title = "Percentage Stacked Bar Chart") +  
  # 设置y轴为百分比格式  
  scale_y_continuous(labels = scales::percent_format()) +  
  # 手动设置填充颜色  
  scale_fill_manual(values = c("#FFA07A""#FFD700""#20B2AA")) +  
  # 使用minimal主题并添加一些自定义设置  
  theme_minimal() +  
  # 调整图例位置  
  theme(legend.position = "bottom") +  
  # 调整坐标轴标题字体大小  
  theme(axis.title = element_text(size = 12)) +  
  # 调整图例标题字体大小  
  theme(legend.title = element_text(size = 10)) +  
  # 调整图例中的文字大小  
  theme(legend.text = element_text(size = 8)) +  
  # 调整图形标题字体大小和位置  
  ggtitle("Percentage Stacked Bar Chart") +  
  theme(plot.title = element_text(hjust = 0.5, size = 14))

欢迎加入

参考资料:https://r-graph-gallery.com



继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存