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

R绘制3D饼图报错及图例添加问题求助

问题解决:3D饼图报错与图例适配优化

一、解决pie3D报错问题

报错根源是数据集中存在数值为0的项(Fictifs对应的nb_sejours_2021=0),pie3D无法为0值分配饼图扇区角度,导致角度序列生成逻辑出错。

解决步骤:

  • 先过滤掉数值为0的行,保留有效数据:
# 过滤0值行,仅保留有实际数据的类别
pie1_PGS <- pie1_PGS[pie1_PGS$nb_sejours_2021 > 0, ]
  • 重新计算百分比标签(此时数据行数已更新,需同步调整标签数量):
lab <- paste0(round(pie1_PGS$nb_sejours_2021/sum(pie1_PGS$nb_sejours_2021) * 100, 2), "%")
  • 再执行原pie3D代码即可正常生成3D饼图。

二、优化图例适配问题

原图例存在标签错误、位置不当、字号过小的问题,优化方案如下:

  1. 动态匹配标签:直接提取过滤后的type_de_sejour作为图例标签,避免手动输入错误
  2. 调整位置与尺寸:选择右上角作为图例位置,放大字号提升可读性,允许图例超出绘图区域(xpd=TRUE)
  3. 颜色完全匹配:确保图例填充色与饼图颜色一一对应

优化后的图例代码:

# 添加适配的图例
legend("topright", 
       legend = pie1_PGS$type_de_sejour,
       cex = 0.8,  # 放大字号,提升可读性
       fill = rainbow(length(lab)),
       xpd = TRUE,  # 允许图例显示在绘图区域外,避免遮挡饼图
       bty = "n"  # 移除图例边框,让整体视觉更简洁
)

完整可运行代码

# 原始数据集
pie1_PGS <- structure(list(type_de_sejour = structure(1:4, levels = c("Ambulatoires", 
"Externes", "Fictifs", "Hospitalisé"), class = "factor"), nb_sejours_2021 = c(20794, 
365, 0, 7866)), row.names = c(NA, -4L), class = "data.frame")

# 过滤0值行
pie1_PGS <- pie1_PGS[pie1_PGS$nb_sejours_2021 > 0, ]

# 计算百分比标签
lab <- paste0(round(pie1_PGS$nb_sejours_2021/sum(pie1_PGS$nb_sejours_2021) * 100, 2), "%")

# 加载plotrix包(若未安装需先运行install.packages("plotrix"))
library(plotrix)

# 绘制3D饼图
pie3D(pie1_PGS$nb_sejours_2021, radius = 0.75,
      height = 0.1,
      theta = 0.7,
      border = "white",
      col = rainbow(length(lab)),
      shade = 0.5,
      labels = lab,
      labelcol = "red",
      labelcex = 0.75,
      explode = 0.2,
      main = "Répartition des séjours 2021 par type")

# 添加优化后的图例
legend("topright", 
       legend = pie1_PGS$type_de_sejour,
       cex = 0.8,
       fill = rainbow(length(lab)),
       xpd = TRUE,
       bty = "n")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 00:06:22