我有一个名为ht2的矩阵。我使用persp
函数生成3D视图。
ht2 <- matrix(1, 29, 36)
ht2[4:26,4:33] <- 0
ht2[6:10,6:31] <- 3
ht2[13:17,6:31] <- 3
ht2[20:24,6:31] <- 3
persp(ht2, expand=0.03, theta=25, phi=25, shade=0.75, col=terrain.colors(999,alpha=1))
这给了我:
如您所见,从绿色到黄色到棕色的颜色沿y轴变化。但是,我宁愿沿z轴改变它。
我正在寻找任何简单的方法。
答案 0 :(得分:2)
我在这个网站找到了一个可能的解决方案:
https://stat.ethz.ch/pipermail/r-help/2003-July/036151.html
levelpersp <- function(x, y, z, colors=topo.colors, ...) {
## getting the value of the midpoint
zz <- (z[-1,-1] + z[-1,-ncol(z)] + z[-nrow(z),-1] + z[-nrow(z),-ncol(z)])/4
## calculating the breaks
breaks <- hist(zz, plot=FALSE)$breaks
## cutting up zz
cols <- colors(length(breaks)-1)
zzz <- cut(zz, breaks=breaks, labels=cols)
## plotting
persp(x, y, z, col=as.character(zzz), ...)
## return breaks and colors for the legend
list(breaks=breaks, colors=cols)
}
## Example
x <- seq(-10, 10, length=60)
y <- x
f <- function(x,y) { r <- sqrt(x^2+y^2); 10 * sin(r)/r }
z <- outer(x, y, f)
levelpersp(x, y, z, theta = 30, phi = 30, expand = 0.5)
有人可能会建议在原始问题中实施此方法。
答案 1 :(得分:0)
原则上你只需要给col =一个矩阵,用你想要填充方块的颜色,就像一个简单的例子:
col=terrain.colors(max(ht2)+1)[ht2[-1,-1]+1]
(这个简单的版本有效,因为ht2包含整数,否则不会)
这将创建所需的所有颜色:terrain.colours(max(ht2)+1)
然后根据一个角为每个位置选择它们:[ht2 [-1,-1] +1]
Anuj Sharma的答案基本上是一个更好的版本,它假设你有十进制数字,所以它将它们分开(中断和切断)而不是采用一个角落它使用中间点的高度(平均值)获得中点时四个移位矩阵的数据)