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

基于R绘制带百分比与图例的堆叠百分比柱状图技术问询

用R生成带百分比标注的堆叠百分比柱状图

我来帮你搞定这个需求!咱们用ggplot2包来实现——这是R里做统计可视化最常用的工具,灵活又好看。下面是完整的步骤和代码,跟着走就行:

1. 准备并整理数据

首先把你给的原始数据转换成R能方便处理的格式,还要把宽格式转成长格式(ggplot更适合长格式数据):

# 加载需要的包
library(tidyverse)

# 输入原始数据
df <- data.frame(
  Year = c(2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2012,2013),
  AIRBUS = c(18,20,23,22,22,22,21,17,14,17,16,11),
  BOEING = c(21,23,26,25,25,27,21,19,22,27,22,24),
  EMBRAER = c(30,31,29,26,25,17,16,22,24,22,19,19)
)

# 转成长格式(方便ggplot处理)
df_long <- df %>%
  pivot_longer(cols = -Year, names_to = "Company", values_to = "Value")

2. 计算各公司的年度占比(百分比)

接下来按年份分组,计算每个公司的数值占当年总和的百分比,这样才能生成堆叠百分比柱状图:

df_percent <- df_long %>%
  group_by(Year) %>%
  mutate(
    Percent = Value / sum(Value) * 100,  # 计算百分比
    Percent_label = sprintf("%.1f%%", Percent)  # 格式化标注文本(保留1位小数)
  ) %>%
  ungroup()

3. 绘制堆叠百分比柱状图(带标注和图例)

现在用ggplot画图,同时加上百分比标注和清晰的图例:

ggplot(df_percent, aes(x = as.factor(Year), y = Percent, fill = Company)) +
  # 绘制堆叠百分比柱状图
  geom_col(position = position_fill(reverse = TRUE), width = 0.7) +
  # 添加百分比标注,调整位置让文字在区块中间
  geom_text(aes(label = Percent_label), 
            position = position_fill(reverse = TRUE, vjust = 0.5),
            size = 3.5) +
  # 设置坐标轴标签和标题
  labs(
    x = "年份",
    y = "占比 (%)",
    title = "各航空公司年度占比堆叠图",
    fill = "航空公司"  # 图例标题
  ) +
  # 设置主题,让图表更美观
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    axis.title = element_text(size = 12),
    legend.position = "bottom"  # 把图例放在底部,更整洁
  )

代码小说明:

  • position = position_fill():让柱状图按百分比堆叠,而非原始数值
  • reverse = TRUE:保持图例和柱状图的顺序一致(避免图例和堆叠顺序颠倒)
  • vjust = 0.5:让百分比标注刚好落在每个堆叠区块的中间位置
  • 你也可以把theme_minimal()换成theme_bw()之类的主题,调整整体风格

运行完上面的代码,就能得到一张带有清晰百分比标注、图例的堆叠百分比柱状图啦!

内容的提问来源于stack exchange,提问作者Lital Dayan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:04:09