我想将变量的值表示为R中散点的点颜色。
x <- rnorm(100) + 5
y <- rnorm(100) + 5
plot(x, y)
在这里,我想使用变量作为着色的输入。但是,如果我尝试
plot(x, y, col = x)
我得到一些奇怪的东西,可能很明显。现在我可以得到我想要的东西:
x_norm = (x - min(x)) / (max(x) - min(x))
col_fun <- colorRamp(c("blue", "red"))
rgb_cols <- col_fun(x_norm)
cols <- rgb(rgb_cols, maxColorValue = 256)
plot(x, y, col = cols)
但这看起来有点复杂,并且为了让它使用NA或NaN值,例如通过将它们设为黑色作为颜色,并不是那么容易。为了我。有一种简单的方法可以做到这一点,我忽略了吗?
答案 0 :(得分:8)
您应该使用cut
将x分为间隔,使用colorRampPalette
创建固定大小的调色板:
x <- rnorm(100) + 5
y <- rnorm(100) + 5
maxColorValue <- 100
palette <- colorRampPalette(c("blue","red"))(maxColorValue)
plot(x, y, col = palette[cut(x, maxColorValue)])
答案 1 :(得分:1)
您可以使用预定义的灰度颜色gray0
,...,gray99
,如下所示:
x <- rnorm(100) + 5
y <- rnorm(100) + 5
x.renormed <- floor(100*((x-min(x))/(diff(range(x))+1e-2)))
colors.grayscale <- paste("gray",x.renormed,sep="")
plot(x, y, col=colors.grayscale, bg=colors.grayscale,pch=21)
结果: