R中的三维表面图

时间:2017-09-28 19:13:19

标签: r plot 3d contour ternary

我有一个关于 3d三元表面图中3组分混合物物理特性可视化的具体问题。

到目前为止,我只在商业软件中看到了这一点。

我希望得到的结果如下图所示。 3d ternary contour plot。该示例来自OriginLab Originlab Examples

另一个商业示例是DesignExpert,具有类似的可视化。

基本的三元图表示混合物的组成,而三角形的高度表示#34;表示混合物的物理性质(例如密度)。

可能会问你是否有任何可用的包可以生成这样的图表?除了这个例子,测量点应该是可见的,轮廓是拟合的模型。

或者是否有可能在R?

中以另一种方式生成这样的图形

我已经尝试过ggtern包,但它不合适,因为我的混音模型不能简单地表示为三元等高线。

由于我在博士论文中使用ggplot2进行可视化我的数据,我更倾向于任何可以提供模拟风格的解决方案。

感谢avvvance

马库斯

1 个答案:

答案 0 :(得分:0)

我现在才在互联网上看到这个问题。也许下面的代码适合你:

trimage <- function( z ){

t1 <- sqrt( length( z ) )

im <- aux <- numeric(0)

   for( i in seq( 1, t1, by = 2 ) ){

   idx <- seq( t1^2, i*t1, by = -t1 ) - ((t1 - i):0)

   #idx <- seq( i*t1, t1^2, by = t1 ) - (i-1) 

   im <- c( im, aux, idx, aux )

   aux <- c( aux, NA )

   }
   z <- matrix( z[im], nr=t1 )
  return( z )
 }


library( fields ) #  use  image.plot  function

tab <- scan()
1.0 0.0 0.0 3.10
0.0 1.0 0.0 0.45
0.0 0.0 1.0 0.35
0.5 0.5 0.0 1.70
0.5 0.0 0.5 4.13
0.0 0.5 0.5 0.27


tab <- matrix( tab, 6,4, byrow=T )

colnames( tab ) <- c("x1", "x2", "x3", "y")

tab <- as.data.frame( tab )

r <- lm( y ~ -1 + x1*x2*x3 - x1:x2:x3, data=tab )

summary( r )

x1 <- seq( 1, 0, len=181 )
x2 <- seq( 1, 0, len=181 )
x123 <- expand.grid( x1=x1, x2=x2 )
x123["x3"] <- 1 - x123["x1"] - x123["x2"]

z <- predict( r, x123 )

ztri <- trimage( z )

image.plot( ztri )

contour( ztri, add=T, lwd=2 )