我认为这个问题的标题说明了一切——我不明白为什么同一个包(graphics
)中的两个函数会以不同的方式处理间隔。该image
函数使用中断参数定义级别,并且该函数cut
分配颜色:
“如果
breaks
指定则zlim
未使用并且使用的算法如下cut
,因此间隔在右侧关闭并在左侧打开,除了两端都关闭的最低间隔。*”
这意味着,例如,如果将中断定义为c(0,100,150,170,190,200)
,150
则将 的值分配给区间 100 < x <= 150:
Levels: (0,100] (100,150] (150,170] (170,190] (190,200]
例如,下图显示了两个可能的图像图,其中覆盖了轮廓。仅当使用稍低的中断时,颜色间隔才与轮廓匹配:
pal=colorRampPalette(c("green", "cyan", "yellow", "red", "pink"), space="rgb")
breaks <- c(0,100, 150, 170, 190, 200)
par(mfrow=c(1,2), mar=c(0.2,0.1,3,0.1))
image(seq(dim(volcano)[1]), seq(dim(volcano)[2]), volcano, col=pal(length(breaks)-1), breaks=breaks, xaxt="n", yaxt="n", ylab="", xlab="")
contour(seq(dim(volcano)[1]), seq(dim(volcano)[2]), volcano, levels=breaks, add=TRUE)
box()
mtext("image(breaks=breaks)\ncontour(levels=breaks)", side=3, line=0.5)
image(seq(dim(volcano)[1]), seq(dim(volcano)[2]), volcano, col=pal(length(breaks)-1), breaks=breaks-0.01, xaxt="n", yaxt="n", ylab="", xlab="")
contour(seq(dim(volcano)[1]), seq(dim(volcano)[2]), volcano, levels=breaks, add=TRUE)
box()
mtext("image(breaks=breaks-0.01)\ncontour(levels=breaks)", side=3, line=0.5)
那么,谁能告诉我这种不匹配是否有原因,或者可能是比我展示的更好的解决方法?