如何在R中用pivot_longer修改列标签绘制堆叠柱状图?
用pivot_longer自定义列名并绘制堆叠柱状图
核心操作思路
pivot_longer的names_to和values_to参数就是用来指定转换后的新列名的,直接把你想要的名称传进去,就能替换默认的name和value列。
完整操作示例
假设你的原始数据是宽格式(年份列 + 多个血清型频次列),按以下步骤操作:
1. 加载所需包
library(tidyr) # 用于数据格式转换 library(ggplot2) # 用于绘图 library(dplyr) # 用于管道操作 %>%
2. 模拟你的数据结构(替换成自己的实际数据即可)
# 示例宽格式数据:年份 + 不同血清型的频次 df_wide <- data.frame( year = c(2020, 2021, 2022), sero_A = c(18, 25, 22), sero_B = c(12, 19, 28), sero_C = c(9, 15, 17) )
3. 用pivot_longer转换为长格式并指定列名
df_long <- df_wide %>% pivot_longer( cols = -year, # 排除year列,转换其余所有列 names_to = "serotypes",# 原宽格式的列名存入新列serotypes values_to = "frequency"# 原宽格式的数值存入新列frequency )
4. 绘制堆叠柱状图
ggplot(df_long, aes(x = factor(year), y = frequency, fill = serotypes)) + geom_col(position = "stack") + # 堆叠柱状图用geom_col labs( x = "年份", y = "频次", fill = "血清型" ) + theme_bw()
参数说明
cols = -year:表示保留year列作为分组列,把剩下的所有血清型列转换成长格式的行names_to = "serotypes":将原来宽格式的血清型列名(如sero_A、sero_B)作为新列serotypes的取值values_to = "frequency":将原来宽格式列里的频次数值作为新列frequency的取值
内容的提问来源于stack exchange,提问作者Megan D
相关产品推荐
相关产品推荐

