该内容已被发布者删除 该内容被自由微信恢复。
文章于 4月7日 下午 9:04 被检测为删除。
被用户删除
其他
R语言绘图 | 百分比堆叠柱状图
准备
# 加载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