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

R语言ggtern三元图如何使用BetaDiv变量作为密度权重

解决方法

你当前的stat_density_tern默认计算的是三元空间内样本点的分布密度,要让密度反映BetaDiv的数值集中程度,只需要给密度计算增加BetaDiv权重映射即可,ggtern的密度统计层原生支持weight参数。

修改后的完整代码如下:

library(ggtern)
# 数据集生成逻辑和原有一致
DENSE<-runif(10, min=0, max=100)
CROP<-runif(10, min=0, max=100)
WILD<-runif(10, min=0, max=100)
BetaDiv<-runif(10, min=0, max=1)
df<-data.frame(DENSE, CROP, WILD, BetaDiv)

# 调整后的绘图代码
ggtern(df[order(-df$BetaDiv),], aes(DENSE, CROP, WILD)) +
  geom_point(alpha=0.8, aes(color=BetaDiv), size=3) + 
  scale_color_viridis_c(direction = -1) +
  stat_density_tern(geom = 'polygon',
                    n = 100,
                    aes(fill = ..level..,
                        alpha = ..level..,
                        weight = BetaDiv)) # 新增权重映射行

改动说明:

  • 核心修改仅为在stat_density_tern的美学映射中添加weight = BetaDiv参数:此时密度计算时,每个样本点的贡献权重等于它对应的BetaDiv数值,最终生成的等高线区域就对应BetaDiv数值更高、更集中的三元坐标范围。
  • 原有代码里的ordered(-df$BetaDiv)属于笔误,修正为order(-df$BetaDiv)即可,该排序仅影响散点的绘制层级,不会影响密度计算结果。
  • 如果觉得密度层的透明度或者色阶不符合需求,可以额外添加scale_fill_viridis_c()、scale_alpha(range = c(0, 0.5))这类参数手动调整展示效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 15:54:01