我正在使用image
命令繪製矩陣,該矩陣包含一些NA
值。我使用image
像如何在圖像圖中爲NA分配特定顏色
image(figData, zlim = zRange, col = colors, useRaster=TRUE)
zRange
比figData
的實際範圍小。我使用下面的一組,這與紅綠色彩感知不足兼容的頂部顏色表:
http://www.mathworks.com/matlabcentral/fx_files/31761/6/thumbnail_184481.jpg
我想在figData
來選擇NA
值的特定顏色是外面colors
(例如,gray
)。 NA
值現在映射到最後一個元素colors
(white
),因此我無法將它們與超出範圍的值區分開來。
理想情況下,我想要一個解決方案,無論我使用哪種調色板。
我想要類似於選項heatmap.2
,我該怎麼辦?我願意修改image
源代碼來完成此操作,但image
似乎稱爲rasterImage
函數,其源代碼無法找到。
接受Jealie的回答後,我在這裏包括代碼考慮到不同的下面和上面的範圍值:
image.nan <- function(z, zlim, col, na.color='gray', outside.below.color='black', outside.above.color='white',...)
{
zstep <- (zlim[2] - zlim[1])/length(col); # step in the color palette
newz.below.outside <- zlim[1] - zstep # new z for values below zlim
newz.above.outside <- zlim[2] + zstep # new z for values above zlim
newz.na <- zlim[2] + 2 * zstep # new z for NA
z[which(z<zlim[1])] <- newz.below.outside # we affect newz.below.outside
z[which(z>zlim[2])] <- newz.above.outside # we affect newz.above.outside
z[which(is.na(z>zlim[2]))] <- newz.na # same for newz.na
zlim[1] <- zlim[1] - zstep # extend lower limit to include below value
zlim[2] <- zlim[2] + 2 * zstep # extend top limit to include the two new values above and na
col <- c(outside.below.color, col, outside.above.color, na.color) # we construct the new color range by including: na.color and na.outside
image(z=z, zlim=zlim, col=col, ...) # we finally call image(...)
}
非常感謝澄清,解決方案和代碼示例。現在我明白爲什麼一些我預計會變成黑色的地方,實際上白色的地方被我認爲是從白色到透明的過渡所包圍。爲了避免這種情況,我創建了一個新版本的代碼,包括限制之下和之上的區別。我在編輯的問題結尾處加入了它。 – nesuribe