persp
有一种基于面片中点计算颜色的棘手方式。这使得在提取颜色级别方面您的工作有些困难,但我认为我已经找到了一种方法。无论如何,layout
可能是拆分设备并添加彩色条的最佳选择:
示例:
layout(matrix(1:2, nrow=1, ncol=2), widths=c(4,1), heights=1)
par(bg = "white", mar=c(4,4,1,1))
x <- seq(-1.95, 1.95, length = 30)
y <- seq(-1.95, 1.95, length = 35)
z <- outer(x, y, function(a, b) a*b^2)
nrz <- nrow(z)
ncz <- ncol(z)
jet.colors <- colorRampPalette( c("blue", "green") )
nbcol <- 100
color <- jet.colors(nbcol)
zfacet <- (z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz])/4
facetcol <- cut(zfacet, nbcol)
persp(x, y, z, col = color[facetcol], phi = 30, theta = -30)
labs <- levels(facetcol)
tmp <- cbind(lower = as.numeric( sub("\\((.+),.*", "\\1", labs) ),
upper = as.numeric( sub("[^,]*,([^]]*)\\]", "\\1", labs) ))
par(mar=c(10,0,10,5))
image(x=1, y=rowMeans(tmp), matrix(rowMeans(tmp), nrow=1, ncol=nbcol), col=color, axes=FALSE, xlab="", ylab="")
axis(4)
box()
![enter image description here](https://istack.dev59.com/yBi9N.webp)
顺便提一下,我意识到persp
的最后一个示例在计算面值时似乎有一个错误 - 目前的面值是角落数值的总和,并且需要除以4才能直接使用它们来提取颜色分割点:
zfacet <- z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz]
facetcol <- cut(zfacet, nbcol)
zfacet <- (z[-1, -1] + z[-1, -ncz] + z[-nrz, -1] + z[-nrz, -ncz]) / 4
facetcol <- cut(zfacet, nbcol)
persp
吗?在library(lattice)
中的wireframe
函数有一个colorkey
参数。 - Rich Scriven