gpt4 book ai didi

r - 制作三元图

转载 作者:行者123 更新时间:2023-12-03 13:20:54 25 4
gpt4 key购买 nike

我想使用 ggplot2 在他们的单纯形上绘制 3 维数据的投影。我以为我可以使用 coord_trans() 管理笛卡尔坐标的转换,但不知 Prop 体怎么做。

这是我尝试过的:

simplex.y  <- function( x1, x2, x3 ) {
return( sqrt(0.75) * x3 / (x1+x2+x3) )
}
simplex.x <- function( x1, x2, x3 ) {
return( (x2 + 0.5 * x3) / (x1+x2+x3) )
}

x <- data.frame(
x1 = c( 0, 0, 1, 0.1, 0.6, 0.2 ),
x2 = c( 0, 1, 0, 0.3, 0.2, 0.8 ),
x3 = c( 1, 0, 0, 0.6, 0.2, 0.0 )
)

require(ggplot2)
ggplot( data = x, aes( x = c(x1, x2, x3), y = c(x1, x2, x3)) ) +
geom_point() +
coord_trans( x="simplex.x", y="simplex.y" )

任何建议表示赞赏。非常感谢!

最佳答案

coord_trans不会做你认为它会做的事情。它将转换已经是 2D 的绘图的 x 和 y 坐标,但您有 3D 数据。

只需自己转换数据,然后绘制它:

simplex.y  <- function(x) {
return( sqrt(0.75) * x[3] / sum(x) )
}
simplex.x <- function(x) {
return( (x[2] + 0.5 * x[3]) / sum(x) )
}

x <- data.frame(
x1 = c( 0, 0, 1, 0.1, 0.6, 0.2 ),
x2 = c( 0, 1, 0, 0.3, 0.2, 0.8 ),
x3 = c( 1, 0, 0, 0.6, 0.2, 0.0 )
)

newDat <- data.frame(x = apply(x,1,simplex.x),
y = apply(x,1,simplex.y))

ggplot(newDat,aes(x = x,y = y)) +
geom_point()

请注意,我重新编写了您的转换函数,使其更像 R。另外,你不应该传递像 x = c(x1,x2,x3) 这样的表达式。内部 aes() .您将数据框中的单个变量映射到单个美学。

关于r - 制作三元图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10439123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com