2017-10-13 177 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"))