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

R绘图技巧:如何将权重占比迷你饼图作为散点绘图符号

实现方案

你可以使用R的scatterpie扩展包实现需求,该包专门适配在散点坐标位置绘制对应占比的迷你饼图,以下是完整可运行代码:

# 首次使用先安装依赖包
install.packages("scatterpie")
library(scatterpie)
library(ggplot2)

# 你的原始示例代码
x <- seq(0, 1, length.out = 10)
y <- sin(x)
set.seed(10)
weights <- matrix(runif(30), ncol = 3)
weights <- sweep(weights, 1, apply(weights, 1, sum), "/")

# 整理为绘图所需数据格式
pie_data <- data.frame(
  x = x,
  y = y,
  group1 = weights[,1],
  group2 = weights[,2],
  group3 = weights[,3]
)
# 统一设置迷你饼图半径,可根据坐标轴范围调整
pie_radius <- 0.06

1. ggplot2体系实现(推荐效果更稳定)

ggplot() +
  geom_scatterpie(aes(x = x, y = y, r = pie_radius), 
                  data = pie_data,
                  cols = c("group1", "group2", "group3")) +
  # 固定坐标轴比例,避免饼图被拉伸为椭圆
  coord_equal() +
  # 自定义分组颜色,可按需修改
  scale_fill_manual(values = c("group1" = "#F8766D", "group2" = "#00BA38", "group3" = "#619CFF")) +
  labs(x = "x", y = "sin(x)", fill = "分组占比") +
  theme_bw()

2. 基础绘图体系实现

# 先绘制空白画布
plot(x, y, type = "n", xlab = "x", ylab = "sin(x)")
# 绘制所有位置的迷你饼图
scatterpie(x = pie_data$x, y = pie_data$y, 
           r = pie_radius,
           data = pie_data,
           cols = c("group1", "group2", "group3"),
           color = "black") # 可设置为NA去掉饼图边框
# 添加图例
legend("topright", 
       legend = c("组1", "组2", "组3"),
       fill = c("#F8766D", "#00BA38", "#619CFF"),
       title = "分组占比")

注意事项

  • 必须固定坐标轴比例,否则饼图会因为x/y轴刻度缩放比例不同变形为椭圆
  • 半径取值需匹配你的数据范围,数据跨度大时可适当调大,避免饼图重叠或过小
  • 可通过scale_fill_manual(ggplot2)或cols参数自定义分组颜色

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:36:06