数据结构如下,绘制百分比堆积柱状图
# 加载必要的库
library(readxl)
library(ggplot2)
library(reshape2)
library(dplyr)
# 读取Excel文件
data <- read_excel("D:/Genus.xlsx")
# 检查数据的前几行以确保列名正确
head(data)
# 检查列名
colnames(data)
# 如果第一列名不是"Group",将其重命名为"Group"
if(colnames(data)[1] != "Group") {
colnames(data)[1] <- "Group"
}
# 将数据转换为长格式
data_long <- melt(data, id.vars = "Group", variable.name = "Genus", value.name = "Count")
# 计算每个分组中占比最高的所占比例
data_long <- data_long %>%
group_by(Group) %>%
mutate(Percentage = Count / sum(Count) * 100) %>%
ungroup()
max_percentage <- data_long %>%
group_by(Group) %>%
summarize(MaxPercentage = max(Percentage))
# 定义更多颜色
custom_colors <- c("#14517C", "#2F7FC1", "#E7EFFA", "#96C37D", "#F3D266", "#D8383A",
"#F7E1ED", "#F8F3F9", "#C497B2", "#A9BBC6", "#FFC1A1", "#B5EAD7",
"#FFDAC1", "#C7CEEA", "#E2F0CB", "#FFB7B2", "#FF9AA2", "#FDCFE8",
"#D5C7BC", "#B39BC8")
# 创建百分比堆积柱状图并应用自定义配色
ggplot(data_long, aes(x = Group, y = Count, fill = Genus)) +
geom_bar(stat = "identity", position = "fill") +
scale_fill_manual(values = custom_colors) +
theme_minimal() +
labs(title = "Percentage Stacked Bar Chart of Genus Counts by Group",
x = "Group",
y = "Percentage") +
scale_y_continuous(labels = scales::percent_format()) + # 将y轴显示为百分比
theme(
plot.margin = margin(t = 40, r = 20, b = 15, l = 20), # 增加底部空间
axis.line = element_line(color = "black"), # 加深轴线颜色
axis.ticks = element_line(color = "black"), # 加深刻度线颜色
axis.title = element_text(color = "black"), # 加深轴标题颜色
axis.text = element_text(color = "black"), # 加深轴文本颜色
plot.title = element_text(hjust = 0.5, vjust = 1.5) # 标题居中并距离图表有一定距离
) +
geom_text(data = max_percentage, aes(x = Group, y = 1, label = paste0(round(MaxPercentage, 1), "%")),
vjust = -0.5, color = "black", size = 4, inherit.aes = FALSE)