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

在R中为分类三元(单纯形)图的三角块按数值着色方案咨询

绘制多类别三元单纯形图的R解决方案

核心工具:ggtern包

ggtern是ggplot2的扩展包,专门用于三元(单纯形)图绘制,完美适配多类别网格+着色的需求。

完整代码实现

# 安装并加载ggtern包
if (!require("ggtern")) install.packages("ggtern")
library(ggtern)

# 生成示例数据(固定随机种子保证结果可复现)
set.seed(123)
grid <- expand.grid(letters[1:6], letters[1:6], letters[1:6])[, 3:1]
colnames(grid) <- c("Var3", "Var2", "Var1")
grid$vals <- runif(nrow(grid), 0, 1)

# 将分类变量转换为数值层级,用于映射到三元坐标
grid$Var1_level <- as.integer(factor(grid$Var1, levels = letters[1:6]))
grid$Var2_level <- as.integer(factor(grid$Var2, levels = letters[1:6]))
grid$Var3_level <- as.integer(factor(grid$Var3, levels = letters[1:6]))

# 绘制带着色的三元网格图
ggtern(data = grid, aes(x = Var3_level, y = Var2_level, z = Var1_level)) +
  stat_triplegrid(aes(fill = vals), breaks = 6) + # breaks对应每个变量的类别数
  scale_fill_gradient2(
    midpoint = 0.5,
    low = "red",
    mid = "white",
    high = "blue",
    name = "Values"
  ) +
  labs(
    x = "Var3",
    y = "Var2",
    z = "Var1",
    title = "6阶三元单纯形网格图"
  ) +
  theme_bw() +
  theme_showarrows()

关键说明

  • stat_triplegrid:根据传入的层级数值自动生成6×6×6的三角网格,每个网格块对应一组分类变量组合。
  • scale_fill_gradient2:精准实现需求中的颜色渐变逻辑——值为0时红色,0.5时白色,1时蓝色。
  • 分类变量转数值层级:将a-f的类别转为1-6的数值,确保网格按类别顺序排列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:32:33