使用向量作为密度的三元图

Ternary Plot using a vector as density

我有这样的数据集:

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[ordered(-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..))

Ternary

但是,我需要通过变量 BetaDiv 给出密度。也就是说,密度显示了 BetaDiv 值集中的位置。

谢谢大家

RS.

你需要通过 aes(value=...) 来指定它,我认为十六进制更有意义,它基本上将你的图切割成十六进制的 bin 并计算每个 bin 中的 beta 值的总和。

set.seed(111)
DENSE<-runif(20, min=0, max=100)
CROP<-runif(20, min=0, max=100)
WILD<-runif(20, min=0, max=100)
BetaDiv<-runif(20, min=0, max=1)
df<-data.frame(DENSE, CROP, WILD, BetaDiv)

g = ggtern(df,aes(DENSE,CROP,WILD))+
geom_point(alpha=0.8, aes(color=BetaDiv), size=3)+
scale_color_viridis_c(direction = -1) +
theme_bw()

g +  stat_hex_tern(aes(value=BetaDiv),binwidth=0.15,alpha=0.15,fun="mean")