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

如何使用R绘制带嵌套形状的散点图/瓦片图?

R实现嵌套分组散点/瓦片图的可行思路

嵌套分组可视化示例

1. 最高效方案:ggplot2多图层叠加

核心逻辑是把三个嵌套分组对应为同坐标、大小依次缩小的三个堆叠图层,每个图层独立绑定一个分组变量设置映射规则,瓦片、散点、热图场景都适用。

1.1 瓦片图/热图实现

三层geom_tile的宽度、高度依次缩小,每层分别映射不同的分组变量,也支持数值型变量做热图填充:

library(ggplot2)
# 模拟测试数据:x/y为坐标,grp1/grp2/grp3为三个层级的分组
test_df <- expand.grid(x = 1:5, y = 1:5)
test_df$grp1 <- sample(c("处理组A", "处理组B"), nrow(test_df), replace = T)
test_df$grp2 <- sample(c("亚型1", "亚型2"), nrow(test_df), replace = T)
test_df$grp3 <- sample(c("阳性", "阴性"), nrow(test_df), replace = T)
# 热图+嵌套分组可视化代码
ggplot(test_df, aes(x = x, y = y)) +
  # 底层:第一级分组/热图数值映射
  geom_tile(aes(fill = grp1), width = 1, height = 1) +
  # 中层:第二级分组映射
  geom_tile(aes(fill = grp2), width = 0.7, height = 0.7) +
  # 顶层:第三级分组映射
  geom_tile(aes(fill = grp3), width = 0.4, height = 0.4) +
  scale_fill_brewer(palette = "Set2") +
  theme_minimal()

如果需要不同分组用不同填充纹理,可搭配ggpattern包的geom_tile_pattern为每层独立设置图案样式。如果遇到多图层图例冲突的问题,可引入ggnewscale包为每个图层单独创建填充比例尺,生成三个独立的分组图例。

1.2 散点图实现

逻辑和瓦片图完全一致,把geom_tile替换为geom_point,调整大小参数即可,也可以给不同层级指定不同的点形状:

ggplot(test_df, aes(x = x, y = y)) +
  geom_point(aes(color = grp1), size = 12, shape = 15) + # 底层大方块
  geom_point(aes(color = grp2), size = 8, shape = 19) + # 中层圆形
  geom_point(aes(color = grp3), size = 4, shape = 17) + # 顶层三角形
  scale_color_brewer(palette = "Set1") +
  theme_minimal()

2. 其他实现方案

  • lattice包:通过layer()函数叠加不同大小的panel.rect或panel.xyplot,每层单独设置分组配色映射即可,逻辑和ggplot2图层思路一致。
  • base R原生绘图:循环遍历每个坐标点,依次调用rect()(瓦片)或points()(散点)绘制三个大小递减的元素,根据对应分组设置col/border/pch参数,灵活性最高,适合高度自定义的样式需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 20:18:03