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饼图。
二、优化图例适配问题
原图例存在标签错误、位置不当、字号过小的问题,优化方案如下:
- 动态匹配标签:直接提取过滤后的
type_de_sejour作为图例标签,避免手动输入错误 - 调整位置与尺寸:选择右上角作为图例位置,放大字号提升可读性,允许图例超出绘图区域(
xpd=TRUE) - 颜色完全匹配:确保图例填充色与饼图颜色一一对应
优化后的图例代码:
# 添加适配的图例 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
相关产品推荐
相关产品推荐

