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

如何用R绘制降序排列且仅显示前8项占比的饼图?

解决饼图排序与标签优化问题及绘图包推荐

数据预处理与绘图代码

先对数据做排序、占比计算和标签标记,再用ggplot2生成符合需求的饼图:

1. 加载依赖包并处理数据

library(tidyverse)

# 你的原始数据
pie_data <- structure(list(job = structure(1:33, levels = c("08", "09", "17", "18", "19", "20", "23", "24", "25", "26", "27", "28", "31", "34", "35", "36", "37", "38", "43", "46", "48", "63", "66", "71", "72", "76", "78", "83", "85", "86", "88", "94", "96"), class = "factor"), N = c(41L, 11L, 203L, 162L, 224L, 28L, 3L, 56L, 2L, 176L, 4L, 13L, 108L, 31L, 3L, 11L, 32L, 30L, 395L, 25L, 2L, 1L, 1L, 155L, 79L, 9L, 15L, 71L, 389L, 12L, 21L, 2L, 3L)), class = "data.frame", row.names = c(NA, -33L))

# 数据预处理:降序排序、计算占比、生成标签
pie_data_processed <- pie_data %>%
  mutate(percent = round(N / sum(N) * 100, 1)) %>% # 计算占比并保留1位小数
  arrange(desc(N)) %>% # 按样本量降序排列
  mutate(
    job = factor(job, levels = job), # 锁定排序后的因子水平,保证饼图顺序
    is_top8 = row_number() <= 8, # 标记前8个热门岗位
    label = ifelse(is_top8, paste0(job, "\n", percent, "%"), "") # 仅为前8个岗位生成标签
  )

2. 绘制优化后的饼图

ggplot(pie_data_processed, aes(x = "", y = N, fill = job)) +
  geom_bar(stat = "identity", width = 1, color = "white") + # 绘制饼图基础
  coord_polar("y", start = 0) + # 转为极坐标实现饼图效果
  geom_text(aes(label = label), position = position_stack(vjust = 0.5), size = 3) + # 标签居中显示
  theme_void() + # 去除冗余的坐标轴、背景等元素
  guides(fill = guide_legend(title = "岗位代码", ncol = 2)) # 调整图例列数,避免拥挤

核心问题解决说明

  • 排序问题:通过arrange(desc(N))对数据降序排序,再重置job的因子水平,确保饼图按样本量从大到小排列。
  • 标签混乱问题:仅为前8个热门岗位生成包含代码和占比的标签,其余岗位不显示标签,既保留所有岗位的扇形样式,又避免标签重叠拥挤。

合适的R绘图包推荐

  • ggplot2:你当前使用的包,是R生态中最灵活的可视化工具,支持高度定制化,能满足几乎所有静态饼图的需求,社区资源丰富,调试成本低。
  • ggpie:基于ggplot2的扩展包,专门针对饼图优化,内置占比自动计算、标签位置调整等功能,能快速生成美观的饼图,减少重复代码。
  • plotly:适合制作交互式饼图,用户可通过hover查看任意岗位的样本量和占比,完美解决类别过多难以对应代码与颜色的问题,适合需要交互展示的场景。
  • treemapify:如果饼图的小扇形过多导致可读性极差,树状图是更优替代方案,能清晰展示不同岗位的占比层级关系,避免视觉混乱。

内容的提问来源于stack exchange,提问作者jc y

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 12:22:14