gpt4 book ai didi

r - 如何在图像图中为 NA 分配特定颜色

转载 作者:行者123 更新时间:2023-12-04 12:21:33 26 4
gpt4 key购买 nike

我正在使用 image命令绘制矩阵,矩阵包含一些 NA值。我正在使用 image喜欢

image(figData, zlim = zRange, col = colors, useRaster=TRUE)
zRange小于 figData的实际范围.我正在使用以下组中的顶部颜色图,它与红绿色感知缺陷兼容:

http://www.mathworks.com/matlabcentral/fx_files/31761/6/thumbnail_184481.jpg

我想为 NA 选择特定颜色 figData 中的值外面 colors (例如, gray )。 NA值现在被映射到 colors 的最后一个元素( white ),因此我无法将它们与超出范围的值区分开来。

理想情况下,我想要一个无论我使用哪种调色板都能奏效的解决方案。

我想要类似于 na.color 的东西 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(...)
}

最佳答案

小更正:外面的值没有被映射到 col 的最后一个元素,但它们根本没有被绘制(并且没有颜色看起来是白色的......)。

否则,要回答您的问题,最简单的方法是围绕 image 编写一个包装器。 ,带有两个新参数:na.coloroutside.color .这是我的建议,默认为 gray对于 NA 值和 white对于 zlim 之外的值:

my.image <- function(figData,  zlim, col, na.color='gray', outside.color='white', ...)
{
newz.na <- zlim[2]+(zlim[2]-zlim[1])/length(col) # new z for NA
newz.outside <- zlim[2]+2*(zlim[2]-zlim[1])/length(col) # new z for values outside zlim

figData$z[which(is.na(figData$z>zlim[2]))] <- newz.na # we affect newz.outside
figData$z[which(figData$z<zlim[1] | figData$z>zlim[2])] <- newz.outside # same for newz.na


zlim[2] <- zlim[2]+2*(zlim[2]-zlim[1])/length(col) # we finally extend the z limits to include the two new values

col <- c(col, na.color, outside.color) # we construct the new color range by including: na.color and outside.color

image(figData, zlim=zlim, col=col, ...) # we finally call image(...)
}

关于r - 如何在图像图中为 NA 分配特定颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20977477/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com