在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
相关产品推荐
相关产品推荐

