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

如何在R中绘制带leader lines(引导线)的3D饼图

R实现带Excel风格引导线的3D饼图

完整可运行代码

library(plotrix)

# 基础配置
x <- c(20, 20, 20, 20, 20)
labels <- c('breakfast', 'brunch', 'lunch', 'snacks', 'dinner')
colors <- c('#4286f4','#bb3af2','#ed2f52','#efc023','#ea7441')
radius_val <- 0.5
explode_val <- 0.1
height_val <- 0.05
theta_val <- pi/6 # 3D透视角度,和pie3D默认参数一致,用于坐标计算

# 引导线配置
leader_inner_offset <- 0.02 # 引导线起点离扇区表面的间距,避免贴合过紧
leader_break_len <- 0.15 # 第一段引导线长度(从扇区向外延伸的部分)
leader_label_gap <- 0.08 # 折点到标签的水平间距

# 输出图片
png(file = "diet3d.png", width = 800, height = 600, res = 100)

# 绘制3D饼图,不使用原生标签,保存返回的扇区中点弧度值
pie_angles <- pie3D(x, 
                    explode = explode_val, 
                    height = height_val, 
                    main = 'Daily Diet Plan', 
                    col = colors, 
                    radius = radius_val,
                    theta = theta_val)

# 循环为每个扇区绘制引导线和标签
for (i in seq_along(pie_angles)) {
  ang <- pie_angles[i]
  # 计算引导线起点(扇区边缘外)
  x1 <- (radius_val + explode_val + leader_inner_offset) * cos(ang)
  y1 <- (radius_val + explode_val + leader_inner_offset) * sin(ang) * sin(theta_val)
  # 计算引导线折点坐标
  x2 <- (radius_val + explode_val + leader_inner_offset + leader_break_len) * cos(ang)
  y2 <- (radius_val + explode_val + leader_inner_offset + leader_break_len) * sin(ang) * sin(theta_val)
  # 计算引导线终点(标签旁)
  x3 <- x2 + ifelse(cos(ang) > 0, leader_label_gap, -leader_label_gap)
  y3 <- y2
  
  # 绘制两段式引导线,样式和Excel一致
  segments(x1, y1, x2, y2, col = "gray50", lwd = 1)
  segments(x2, y2, x3, y3, col = "gray50", lwd = 1)
  
  # 绘制标签,左右半区自动调整对齐方式
  text(x3, y3, labels = labels[i], 
       pos = ifelse(cos(ang) > 0, 4, 2), 
       cex = 0.9)
}

dev.off()

关键逻辑说明

  • 取消pie3D函数原生的labels参数,改为自定义绘制标签,方便和引导线精准对齐
  • 利用pie3D返回的扇区中点弧度值计算各节点坐标,适配3D透视对Y轴的缩放比例,引导线不会出现错位
  • 引导线采用两段折线设计,和Microsoft Excel的leader lines样式完全匹配,颜色设为中性灰避免干扰扇区的色彩展示
  • 标签对齐方式根据扇区所在的左右半区自动调整,避免标签溢出画布范围

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:00:01