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

ggpubr环形图标签位置错误求助(ggplot亦存在该问题)

解决ggpubr环形图标签与分组不匹配的问题

使用ggpubr绘制环形图时,会出现标签和分组错位的情况——最小分组'A'被错误标记为'D',这类问题在ggplot中也存在。

问题复现代码

library(ggpubr)
df <- data.frame(group = c("A", "B", "C","D"),
                 value = c(1, 21, 26, 52))
ggdonutchart(df, "value", label = "group")
ggdonutchart(df, "value", label = "group",
             fill = "group", color = "white")
# 显示分组名和数值的标签
labs <- paste0(df$group, " (", df$value, "%)")
ggdonutchart(df, "value", label = labs,
             fill = "group", color = "white")

问题原因

ggpubr的ggdonutchart内部会默认按value从大到小排序绘制环形图,但自定义的标签向量没有同步跟随数据排序,最终导致标签和实际分组错位。

解决方法

方法1:同步排序数据与标签

先对原始数据按value排序,再基于排序后的数据生成标签,确保标签和分组一一对应:

library(ggpubr)
# 按value从大到小排序数据
df_sorted <- df[order(-df$value), ]
# 基于排序后的数据生成标签
labs_sorted <- paste0(df_sorted$group, " (", df_sorted$value, "%)")
# 绘制环形图
ggdonutchart(df_sorted, "value", label = labs_sorted,
             fill = "group", color = "white")

方法2:使用aes映射标签(更推荐)

不要直接传入标签向量,而是通过aes(label = ...)将标签与分组绑定映射,让函数自动匹配对应关系:

library(ggpubr)
df$labs <- paste0(df$group, " (", df$value, "%)")
# 直接通过列名映射标签
ggdonutchart(df, "value", 
             label = "labs",
             fill = "group", color = "white")

内容的提问来源于stack exchange,提问作者Roger J Bos CFA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 04:24:16