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
相关产品推荐
相关产品推荐

