基于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
相关产品推荐
相关产品推荐

