R语言绘制含全市及区域分类占比的复合柱状图求助
数据预处理与复杂占比柱状图实现
一、基础数据预处理
我们需要先计算全市及各区域下f1各分类的占比,这里使用dplyr和tidyr完成数据整理:
首先加载所需包:
library(dplyr) library(tidyr) library(ggplot2)
然后处理数据,分别计算区域级和全市级的占比并合并:
# 计算各区域的f1分类占比 district_ratio <- df %>% group_by(district, f1) %>% summarise(count = n(), .groups = "drop") %>% group_by(district) %>% mutate(ratio = count / sum(count)) %>% ungroup() # 计算全市整体的f1分类占比 city_ratio <- df %>% group_by(f1) %>% summarise(count = n(), .groups = "drop") %>% mutate(district = "全市", ratio = count / sum(count)) %>% ungroup() # 合并两类数据,得到绘图用数据集 plot_data <- bind_rows(district_ratio, city_ratio)
二、绘制指定样式的柱状图
结合需求,我们绘制分组柱状图,将全市和各区域的f1分类占比并列展示,代码如下:
ggplot(plot_data, aes(x = district, y = ratio, fill = f1)) + # 绘制分组柱状,设置柱子宽度和边框 geom_col(position = position_dodge(width = 0.8), width = 0.7, color = "black") + # 添加百分比标签,置于柱子上方 geom_text(aes(label = sprintf("%.1f%%", ratio * 100)), position = position_dodge(width = 0.8), vjust = -0.5, size = 3.5) + # 将y轴转换为百分比格式,设置范围 scale_y_continuous(labels = scales::percent_format(accuracy = 1), limits = c(0, 1)) + # 设置图表标签 labs(x = "区域", y = "占比", fill = "f1分类", title = "全市及各区域f1分类占比") + # 调整主题,优化视觉效果 theme_minimal() + theme(plot.title = element_text(hjust = 0.5, size = 14, face = "bold"), axis.title = element_text(size = 12), legend.title = element_text(size = 12), axis.text = element_text(size = 10))
代码说明
position_dodge(width = 0.8)实现同一区域下不同f1分类柱子的并排展示geom_text添加占比数值标签,方便直接读取数据scale_y_continuous将y轴转换为百分比格式,更直观呈现占比- 主题调整让图表标题、坐标轴标签和图例的排版更清晰,贴近参考样式的视觉效果
内容的提问来源于stack exchange,提问作者kehricht
相关产品推荐
相关产品推荐

