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

如何通过R的ggplot函数绘制仅含前三操作系统的饼图?

实现ggplot直接展示占比前三的操作系统饼图

嘿,这个需求完全可以不用提前修改原始数据框,通过ggplot配合dplyr的数据处理管道就能直接实现!下面给你具体的解决方案:

核心思路

在ggplot的数据流中,先对原始数据做聚合、计算占比,再筛选出占比前三的操作系统,最后直接绘制饼图——全程不会修改你的原始数据框。

完整代码示例

假设你的原始数据框名为os_data,包含operatingSystem(操作系统名称)和session_count(会话数,用来计算占比的数值列):

# 先加载需要的包
library(ggplot2)
library(dplyr)

# 直接在ggplot的数据流里完成数据处理+绘图
os_data %>%
  # 第一步:按操作系统分组,统计总会话数(如果你的数据已经是汇总好的,这步可以跳过)
  group_by(operatingSystem) %>%
  summarize(total_sessions = sum(session_count)) %>%
  # 第二步:计算每个系统的占比
  mutate(percentage = total_sessions / sum(total_sessions)) %>%
  # 第三步:筛选出占比前三的系统
  slice_max(order_by = percentage, n = 3) %>%
  # 开始绘制饼图
  ggplot(aes(x = "", y = percentage, fill = operatingSystem)) +
  geom_bar(stat = "identity", width = 1) +  # 绘制基础条形图
  coord_polar("y", start = 0) +  # 转换为极坐标(饼图)
  geom_text(
    aes(label = scales::percent(percentage)),  # 添加百分比标签
    position = position_stack(vjust = 0.5)  # 标签居中显示
  ) +
  theme_void() +  # 清除多余的背景、坐标轴元素
  labs(
    title = "Top 3 Operating Systems by Session Share",
    fill = "Operating System"  # 图例标题
  )

关键细节说明

  1. 数据筛选的两种方式:

    • 如果你的dplyr版本≥1.0.0,用slice_max(order_by = percentage, n = 3)可以直接取出占比最高的3个类别,代码更简洁。
    • 如果版本较低,用arrange(desc(percentage)) %>% head(3)替代即可,效果完全一样。
  2. 不用修改原始数据:
    整个数据处理过程都是在管道(%>%)中完成的,原始的os_data不会被修改,完全符合你的需求。

  3. 饼图的本质:
    ggplot本身没有专门的饼图函数,饼图其实是极坐标下的条形图,所以用geom_bar()加coord_polar("y")来实现,这是ggplot绘制饼图的标准方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:03:27