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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 19:27:53