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

R语言绘制不同位置与尺寸的自定义多饼图

R绘制大小映射总丰度的分组多饼图

你要的这种「x轴为采样位点、y轴为采样水深,饼图大小对应该位点该深度下所有动物总计数、扇区占比对应当前样本三类动物组成」的图,用scatterpie包实现最直接,不用手动计算饼图坐标,代码可复现性也高。

实现逻辑

  • 先加载需要的依赖包,预处理数据:按「采样位点+水深」分组计算每个样本的总计数,再把长表转成宽表适配散点饼图的输入格式
  • 映射坐标轴:x轴对应Position列,y轴对应Depth列(常规水深可视化建议反转y轴,让浅水层在图的上方,深水层在下方)
  • 映射视觉属性:饼图半径绑定总计数,扇区填充绑定三个动物类群,调整缩放系数避免饼之间重叠

完整可运行代码

# 加载依赖包,没装的先运行install.packages(c("tidyverse","scatterpie"))安装
library(tidyverse)
library(scatterpie)

# 读入示例数据集
df <- read.table(text="Position Depth Group Value
A   50  G1  30
A   50  G2  60
A   50  G3  10
A   200 G1  10
A   200 G2  10
A   200 G3  30
B   50  G1  24
B   50  G2  48
B   50  G3  8
B   100 G1  8
B   100 G2  8
B   100 G3  24
C   100 G1  36
C   100 G2  72
C   100 G3  12
C   600 G1  12
C   600 G2  12
C   600 G3  36",
header=TRUE)

# 数据预处理
df_plot <- df %>%
  group_by(Position, Depth) %>%
  mutate(total_count = sum(Value)) %>% # 计算每个样本的总计数,用来映射饼大小
  ungroup() %>%
  pivot_wider(names_from = Group, values_from = Value) # 转宽表适配scatterpie输入要求

# 绘图
ggplot() +
  geom_scatterpie(
    aes(x = Position, y = Depth, r = total_count/220), # 除以220是半径缩放系数,根据实际效果调整
    data = df_plot,
    cols = c("G1", "G2", "G3"), # 指定构成扇区的列
    color = "white", # 扇区间加白色分隔线
    linewidth = 0.5
  ) +
  # 自定义类群配色,可按需替换
  scale_fill_manual(
    values = c("G1" = "#E64B35", "G2" = "#4DBBD5", "G3" = "#00A087"),
    name = "动物类群"
  ) +
  # 反转y轴,符合水深从上到下加深的展示逻辑,不需要可以删掉这行
  scale_y_reverse(breaks = unique(df$Depth), name = "采样水深") +
  scale_x_discrete(name = "采样位点") +
  # 固定坐标比例,保证饼图是正圆不会拉伸变形
  coord_equal() +
  theme_bw(base_size = 12) +
  theme(
    panel.grid = element_blank(),
    legend.position = "right"
  )

参数调整说明

  • 半径缩放系数:代码里r = total_count/220的分母可以自己改,分母越小饼整体越大,分母越大饼越小,调整到相邻饼不重叠即可
  • 如果需要固定饼的大小区间,可以追加scale_radius(range = c(0.1, 0.8)),括号里的两个值分别对应最小、最大饼的半径比例
  • 配色、字体、主题元素都可以按自己的绘图需求修改,和普通ggplot2图层的调整逻辑完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 12:33:29