将R中的数字转换为特定颜色?

问题描述

R scale_color_gradient的ggplot2中有一个函数,您可以在设定的限制内指定“低”颜色和“高”颜色,并根据该比例为数字着色。 / p>

例如

scale_color_gradient(low="red",high="blue",limits = c(0,1))

将颜色数字= 0表示红色,数字= 1表示蓝色,并且介于两者之间的数字是介于红色和蓝色之间的颜色(由数字决定颜色)。

我的问题是-给定一个数字(例如0.5),是否可以基于相同的比例为该数字分配颜色?

解决方法

就像其他人提到的那样,您可以使用scale_color_gradientn()指定n种颜色的渐变并创建自己的渐变。您可以在函数上查看the documentation以获得更多信息,但这是一个有效的示例。

library(ggplot2)
set.seed(1234)
df <- data.frame(
  x=1:200,y=rnorm(200,1,0.2),cols=sample(1:10,200,replace = TRUE)
)

p <- ggplot(df,aes(x,y,color=cols)) + geom_point()
p + scale_color_gradientn(colors=c('blue','green','yellow','red'))

enter image description here

这看起来不错,但是如果您想要(如您在案例中所述)为颜色指定一个特定位置该怎么办?在这种情况下,假设我们希望df$cols==5.0为黄色。

您可以通过为values=参数提供向量来实现。但是,有一点窍门在文档中并不明显。 values=参数需要一个向量来表示您的每个colors=的位置,其范围为从0到1 。请注意,df$cols的范围是0到10,这意味着df$cols==5.0values=0.5表示。

p + scale_color_gradientn(
    colors=c('blue','red'),values=c(0,0.2,0.5,1)
  )

enter image description here