2014-02-08 118 views
1

我正在嘗試從格子包中製作一個水平圖(也顯示輪廓線)。我有幾個問題(如下所述)。R levelplot colorkey標籤和顏色範圍

邁德特: https://www.dropbox.com/s/ht55g0qlkiou2x2/growth.matrix.stackoverflow.xlsx

require(lattice)  
require(latticeExtra) 
require(xlsx) 

#matrix to be plotted 
growth.matrix<-as.matrix(read.xlsx("C:/Users/eckmannm/Dropbox/growth.matrix.stackoverflow.xlsx",sheetName="p4.pct",colIndex=2:8,startRow=3,endRow=15,header=FALSE)) 

#column values 
TempRange<-as.numeric(c(0, 2, 4, 6, 8, 10, 12)) 
#row values 
MeanTemp<-as.numeric(c(6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18)) 
#x and y axis labels 
x.range<-as.numeric(c(6, 8, 10, 12, 14, 16, 18)) 

#color ramp 
col.l <- colorRampPalette(c('red', 'orange', 'yellow', 'green', 'cyan', 'blue')) 

colorplot<- 
    levelplot(
    growth.matrix, 
    row.values=(MeanTemp), 
    column.values=(TempRange), 
    col.regions=col.l, 
    at=seq(from=0,to=1.01,length=100), 
    lattice.options=list(key=list(cex=4)), 
    panel = panel.2dsmoother, 
    scales=list((x=list(labels=MeanTemp)), y=list(labels=TempRange)), 
    colorkey=list(at=as.numeric(factor(c(seq(from=0, to=1, by=.20)))), 
       labels=as.character(c("0", "20%", "40%", "60%", "80%", "100%")), 
       col=(col.l))) 

contourplot<- 
    contourplot(
    growth.matrix, 
    row.values=MeanTemp, 
    column.values=TempRange, 
    at=seq(from=0, to=1.01, by=.2), 
    panel=panel.2dsmoother, 
    label.style=("flat"), 
    lwd=2, 
    labels=(list(cex=1.5,labels=(c("0", "20%", "40%", "60%", "80%", "100%"))))) 

(final.plot= (colorplot + contourplot)) 

>> dput(head(growth.matrix)) 
structure(c(0.117236699239957, NA, 0.416693811074919, NA, 0.776134455117953, 
NA, NA, 0.263952225841477, NA, 0.582491856677524, NA, 0.855917480998914, 
NA, NA, 0.423344191096634, NA, 0.6792888165038, NA, NA, NA, NA, 
0.5164223669924, NA, 0.698561346362649, NA, NA, NA, NA, 0.534989142236699, 
NA, NA, NA, NA, NA, NA, 0.507193268186754, NA, NA, NA, NA, NA, 
NA), .Dim = 6:7, .Dimnames = list(NULL, c("X2", "X3", "X4", "X5", 
"X6", "X7", "X8"))) 

The plot I have been producing

1)I真的希望在着色區域的邊緣(軸標籤和圖形)之間,除去垂直白邊。

2)我想圖例有離散標籤,具有不同斷點比色

3)由於某種原因,輪廓線標籤繪製斷圖形的???

任何幫助將不勝感激!提前致謝。

+0

我不斷收到您的代碼錯誤....你可以發佈一個可重複的例子嗎? –

+0

@IShouldBuyABoat:代碼工作正常,但你需要加載一些包,我更新了代碼 – nico

回答

9

我真的很想去掉彩色區域邊緣(軸標籤和圖形之間)的垂直白色邊框。

添加xlim=c(6,18)levelplot通話


我想傳說有離散的標籤,以不同的斷點比色

?levelplot

at:指定顏色更改位置的數字向量。必須比col向量長1。

標籤:用於標記at值的字符向量,或者更常見的是描述標籤特徵的列表。此列表可能包含組件標籤,at,cex,col,rot,font,fontface和fontfamily。

所以,本質上你可以設置colorkey爲:

colorkey=list(at=seq(0, 1, 0.2), 
       labels=list(at=c(0, 0.3, 0.6, 0.9), 
          labels=c("none", "a bit", "a bit more", "a lot")) 

請注意,有沒有必要使用factoras.numericas.character,所以我把他們趕走。


3)由於某種原因,輪廓線標籤繪製斷圖形的???

務必從幫助頁面:

標籤:通常的邏輯表示輪廓線是否應標,但存在其他可能性更復雜的控制。有關詳細信息,請參閱panel.levelplot的幫助頁面,該參數未被更改。這幫助頁面也記錄了label.style參數,它會影響標籤的渲染

而且,在?panel.levelplot我們發現:

label.style:控制如何標籤位置和旋轉被確定。 「平坦」的值導致標籤位於輪廓最平坦的位置,並且標籤不旋轉。 「對齊」值會使標籤儘可能遠離邊界繪製,並且旋轉標籤以與該點處的輪廓對齊。默認設置是混合這些方法,除非距離邊界太近,否則寧願選擇最平坦的位置。

我認爲您的具體數據混合(默認)解決方案效果最好。最簡單的方法是從contourplot呼叫中刪除label.style參數。

相同的手冊頁也有助於樣式標籤。