我必须生成{z}值中具有某种对称性的filled.contour
图,如下面的代码所示
x <- 1:5
y <- 1:5
z <- matrix(outer(x,y,"+"),nrow=5)
filled.contour(x,y,z)
filled.contour(x,y,z,color.palette=rainbow)
z2 <- z
z2[5,5] <- Inf
filled.contour(x,y,z2,col=rainbow(200),nlevels=200)
我希望能够描述z值的水平,例如某些水平或增量(2,4,6,8,10)增量,以获得以下图表
我希望保留col=rainbow(200)
的级别以绘制平滑的颜色和颜色过渡,但我想描绘某些值/增量。
这可能吗?我会很感激基础R解决方案,但如果不可能,任何解决方案都会很好(ggplot,lattice)
答案 0 :(得分:4)
您可以使用countourLines()添加行和text()来添加文本:
txtlab <- c("2", "4", "6", "8", "Inf")
txtpos <- c(1.25, 2, 3, 4, 4.75)
ctlns <- contourLines(x, y, z2, levels=c(3, 5, 7, 9))
filled.contour(x,y,z2,col=rainbow(200),nlevels=200,
plot.axes={axis(1); axis(2); text(txtpos, txtpos, txtlab, cex=1.5);
sapply(1:4, function(x) lines(ctlns[[x]][[2]], ctlns[[x]][[3]], lwd=2))
})
答案 1 :(得分:1)
这里的每个整数都是黑色的(使用is.integer中的一个例子),可以修改为只返回black
,甚至整数都很容易:
getcolor <- function(z, n) {
is.wholenumber <-
function(x, tol = .Machine$double.eps^0.5) abs(x - round(x)) < tol
pp <- pretty(range(z, finite=TRUE), n)
ifelse(is.wholenumber(pp), 'black', rainbow(n))
}
filled.contour(x,y,z2,col=getcolor(z2, 200),nlevels=200)
答案 2 :(得分:0)
我最近做过类似的事情而且我使用了那种类型的代码:
x <- 1:5
y <- 1:5
z <- matrix(outer(x,y,"+"),nrow=5)
z2 <- z
z2[5,5] <- Inf
filled.contour(x,y,z2,col=rainbow(200),nlevels=200
plot.axis = {axis(1);axis(2);contour(x,y,z2,add=TRUE)}) #that's when you add the contours