2017-10-13 151 views
1

在R中,我有一个围绕零的数据云,并且一些数据在1左右,我想“重新调整”我的热量颜色以区分较低的数字。这必须以彩虹方式完成,不要“离散的颜色”。我尝试了image.plot中的中断,但它不起作用。在r中调整颜色调色板

image.plot(X,Y,as.matrix(mymatrix),col=heat.colors(800),asp=1,scale="none") 

我想:

lowerbreak=seq(min(values),quantile2,len=80) 
    highbreak=seq(quantile2+0.0000000001,max(values),len=20) 
    break=c(lowerbreak,highbreak) 
    ii <- cut(values, breaks = break, 
      include.lowest = TRUE) 

    colors <- colorRampPalette(c("lightblue", "blue"))(99)[ii] 
+0

也许'?colorRamp'插值颜色。 –

+0

我试过,但我无法理解我该如何区分低价值 – gdlzzzz

回答

1

使用colorRampPalette,您可以设置bias说法,强调低(或高)值。

colorRampPalette(heat.colors(100),bias=3)这样的东西将会导致更低的“倾斜”,帮助它们在视觉上更加明显。

+0

我必须提供太高的偏差,使颜色斜坡全部变黄而不存在阴影 – gdlzzzz

2

以下是使用“压扁”库的方法。使用makecmap(),可以指定颜色值和中断,还可以指定使用base参数对其进行日志延伸。这有点复杂,但可以让你精确控制。我用它着色偏斜的数据,我需要在“低端”有更多的定义。

要实现彩虹调色板,我使用了内置的“jet”颜色功能,但是您可以使用任何颜色设置 - 我给出了使用“colorRampPalette”创建灰度渐变的示例。

无论使用哪个斜坡,都需要使用base值来演奏以优化您的数据。

install.packages("squash") 
library("squash") 

#choose your colour thresholds - outliers will be RED 
minval=0 #lowest value to get a colour 
maxval=2.0 #highest value to get a colour 
n.cols=100 #how many colours do you want in your palette? 
col.int=1/n.cols 

#create your palette 
colramp=makecmap(x=seq(minval,maxval,col.int), 
       n=n.cols, 
       breaks=prettyLog, 
       symm=F, 
       base=10,#to give ramp a log(base) stretch 
       colFn=jet, 
       col.na="red", 
       right=F, 
       include.lowest=T) 

# If you don't like the colFn options in "makecmap", define your own! 
# Here's an example in greyscale; pass this to "colFn" above 
user.colfn=colorRampPalette(c("black","white"))