如何转换R语言flexclust包milk数据集以适配ggplot堆叠百分比柱状图?
解决milk数据集格式转换与堆叠百分比柱状图绘制问题
步骤1:加载依赖包与预处理数据集
首先加载flexclust获取目标数据集,tidyverse用于数据转换和绘图。原milk是矩阵格式,需转为数据框并提取行名作为Animal列:
library(flexclust) library(tidyverse) # 将milk矩阵转为带Animal列的数据框 milk_df <- as.data.frame(milk) %>% rownames_to_column(var = "Animal")
步骤2:转换为三列长格式
使用pivot_longer将宽格式的营养成分列拆分为Nutrient(营养成分名称)和Value(对应数值)两列,得到你需要的三列结构:
# 宽转长,生成Animal、Nutrient、Value三列数据 milk_long <- milk_df %>% pivot_longer(cols = -Animal, names_to = "Nutrient", values_to = "Value")
步骤3:绘制堆叠百分比柱状图
借助ggplot2直接绘制百分比堆叠图,position = "fill"会自动将各营养成分的数值转换为占比:
# 绘制堆叠百分比柱状图 ggplot(milk_long, aes(x = Animal, y = Value, fill = Nutrient)) + geom_col(position = "fill") + scale_y_continuous(labels = scales::percent) + # 将y轴刻度转为百分比格式 labs(title = "动物奶营养成分占比", x = "动物", y = "百分比", fill = "营养成分") + theme(axis.text.x = element_text(angle = 45, hjust = 1)) # 旋转x轴标签避免重叠
内容的提问来源于stack exchange,提问作者Rosie Lomas
相关产品推荐
相关产品推荐

