R 填充轮廓-描绘z值水平的变化
我必须生成R 填充轮廓-描绘z值水平的变化,r,graphics,R,Graphics,我必须生成filled.contour图,这些图在z值中具有某种对称性,如下面的代码所示 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=2
filled.contour
图,这些图在z值中具有某种对称性,如下面的代码所示
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)
x这里的每一个整数都是黑色的(使用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)
getcolor您可以使用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))
})
txtlab我最近做过类似的事情,我使用了这种类型的代码:
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
x太好了。非常感谢你。这是否也允许直线,但曲线?是的,contourLines()函数也将构造曲线轮廓线。太棒了!我会给你答案,因为这个答案不会弄乱传说。sapply也很有用!非常感谢你!这是一个非常聪明的方法。将线条图形集成到颜色中。我有两个问题。1.我希望自己指定范围/间隔(而不是依赖于“漂亮”)。2.这种方法是否允许弯曲的生命?3.图例上有没有可能不画黑线?。感谢lot1:图例和情节似乎没有单独的颜色参数,答案似乎是2:没有任何线条;如果形状z==常数是弯曲的,则黑色也会弯曲。