2015-09-27 41 views
1

我们如何制作不同层次的颜色以更好地看到R中的多元函数?我想检查功能是否拟凹和拟凸,但这些东西是很难在1一个彩色图看...R在多变量图中的颜色层

# Define Sequences for Multivariate Function 
xf3x1 <- seq(-100, 100, length=500) 
xf3x2 <- seq(-100, 100, length=500) 

# Outer Calculates the Cartesian Product 
z <- outer(xf3x1,xf3x2,function(xf3x1,xf3x2) xf3x1*xf3x2) 
persp(xf3x1,xf3x2,z,col="lightgreen",theta=30,phi=20, main="Problème 3: Function 3") 

回答

1

plot3D包是一个附加的选项。 persp3D颜色由z值默认为:

library(plot3D) # For persp3D function 

# Define Sequences for Multivariate Function 
#### length=50 to speed up plotting #### 
xf3x1 <- seq(-100, 100, length=50) 
xf3x2 <- seq(-100, 100, length=50) 

# Outer Calculates the Cartesian Product 
z <- outer(xf3x1,xf3x2,function(xf3x1,xf3x2) xf3x1*xf3x2) 

persp(xf3x1,xf3x2, z, theta=30, phi=20, 
     col="lightgreen", 
     main="persp: Black border lines overwhelm plot") 

persp(xf3x1,xf3x2, z, theta=30, phi=20, 
     col="lightgreen", 
     border="black", lwd=0.2, # Or border=NA per @jlhoward 
     main="persp: Thinner border lines") 

persp3D(xf3x1,xf3x2, z, theta=30, phi=20, 
     main="persp3D: No borders by default") 

persp3D(xf3x1,xf3x2, z, theta=30, phi=20, 
     border="black", lwd=0.5, 
     main="persp3D with borders") 

enter image description here

1

首先,您需要设置border=NA关闭表面刻面周围的边界。

一种方法是根据z值进行着色。适应this post

nrz <- nrow(z) 
ncz <- ncol(z) 
color <- rev(rainbow(100)) 
zfacet <- z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz] 
facetcol <- cut(zfacet, 100) 
persp(xf3x1,xf3x2,z,col=color[facetcol],border=NA,,theta=30,phi=20) 

我会鼓励你去尝试surface3d(...)rgl包,它会创建可旋转3D绘图。下面的图片只是一个屏幕截图。

zlen <- diff(range(z)) + 1 
clrs <- rev(rainbow(zlen)) 
col <- clrs[ z - min(z) + 1 ] # assign colors to heights for each point 
open3d(scale=c(100,100,1)) 
surface3d(xf3x1,xf3x2,z,col=col, main="Problème 3: Function 3") 
axes3d(box=TRUE) 
title3d(xlab="xf3f1", ylab="xf3x2", zlab="z")