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

Donut饼图修改需求:添加图例、显示计数及百分比优化

Donut饼图:调整标签、添加带百分比的图例

需求说明

  • 饼图/环形图内显示计数,而非默认的百分比
  • 图例中需列出对应变量的整数百分比
  • 为图表添加图例

原测试代码

PieDonut(PD, aes(Field, Status, count=n), explode=1, explodeDonut=TRUE, labelposition=1)

原结果与数据

执行结果图
数据图

解决方案代码

先加载依赖包,计算分组百分比后自定义图表的标签和图例:

library(ggiraphExtra)
library(dplyr)

# 按Field分组计算各Status的整数百分比
PD_pct <- PD %>%
  group_by(Field, Status) %>%
  summarise(count = sum(n), .groups = "drop") %>%
  group_by(Field) %>%
  mutate(pct = round(100 * count / sum(count))) %>%
  ungroup()

# 绘制调整后的Donut饼图
PieDonut(PD_pct, aes(Field, Status, count = count),
         explode = 1, explodeDonut = TRUE, labelposition = 1,
         label = "count",          # 图表内显示计数
         legend = TRUE,            # 启用图例
         legendLabels = paste(PD_pct$Status, " (", PD_pct$pct, "%)", sep = "")
)

关键参数说明

  • label = "count":直接指定图表内显示计数,替换默认的百分比显示
  • legend = TRUE:强制开启图例(部分场景下默认可能隐藏)
  • 提前计算百分比并赋值给legendLabels:让图例标签带上整数百分比信息

如果需要计算整体数据中各Status的百分比(而非按Field分组),可以调整分组逻辑:

PD_total_pct <- PD %>%
  group_by(Status) %>%
  summarise(total = sum(n), .groups = "drop") %>%
  mutate(pct = round(100 * total / sum(total)))

PieDonut(PD, aes(Field, Status, count=n),
         explode = 1, explodeDonut = TRUE, labelposition = 1,
         label = "count",
         legend = TRUE,
         legendLabels = paste(PD_total_pct$Status, " (", PD_total_pct$pct, "%)", sep = "")
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 19:22:47