You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 12:50:21