我认为这个问题的标题说明了一切 - 我无法理解为什么来自同一个包(graphics
)的两个函数会以不同的方式处理区间。 image
函数使用breaks参数定义级别,函数cut
分配颜色:
“如果指定
breaks
,则zlim
未使用,并且使用的算法遵循cut
,因此间隔在右侧关闭,在左侧打开,除了最低间隔,即在两端关闭。*“
这意味着,例如如果将中断定义为c(0,100,150,170,190,200)
,则将150
的值分配给区间100&lt; 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)
那么,任何人都可以告诉我是否存在这种不匹配的原因,或者可能更好的解决方法而不是我所展示的那种?