簡體   English   中英

如何使用 lattice 和 levelplot 控制熱圖?

[英]How do I control a heatmap with lattice and levelplot?

今天早上,我開始尋找一種解決方案,從我在這里擁有的成對值表中生成熱圖。 我發現格子levelplots提供了看起來像我所追求的水平圖。 當我設法將我的數據轉換為正確的格式時,我使用了levelplot 默認顏色主題不會產生我想要的,我在 web 上找到了灰度解決方案。 但是,現在控制更多 plot 有點超出我的 scope 范圍。 我不經常使用 R 並且對許多更深層次的數據結構還不是很熟悉。

我當前的命令是:

library("lattice")
matrix <- as.matrix(rev(read.table("inputfile",header=T,row.names=c(<list of ten names>))))
levelplot(matrix,col.regions = grey(100:0/100))

這是 dput 矩陣的 output:

structure(c("937.5", "652.5", "1066.5", "787.5", "229.5", "115.5", 
"787.5", "763.5", "415.5", "N/A", "1483.5", "1360.5", "1858.5", 
"1309.5", "478.5", "322.5", "1375.5", "1588.5", "N/A", "1759.5", 
"643.5", "904.5", "1189.5", "712.5", "256.5", "154.5", "829.5", 
"N/A", "403.5", "1231.5", "808.5", "1096.5", "1195.5", "913.5", 
"292.5", "187.5", "N/A", "1147.5", "478.5", "1192.5", "6712.5", 
"6373.5", "6517.5", "6058.5", "4555.5", "N/A", "6394.5", "7357.5", 
"6214.5", "6835.5", "3412.5", "3991.5", "3814.5", "3793.5", "N/A", 
"1327.5", "3994.5", "3808.5", "3307.5", "4618.5", "1261.5", "1261.5", 
"1162.5", "N/A", "310.5", "220.5", "1195.5", "1639.5", "574.5", 
"1732.5", "871.5", "847.5", "N/A", "610.5", "262.5", "172.5", 
"943.5", "985.5", "448.5", "1525.5", "940.5", "N/A", "1105.5", 
"829.5", "292.5", "160.5", "961.5", "1198.5", "538.5", "1495.5", 
"N/A", "832.5", "1009.5", "880.5", "280.5", "196.5", "952.5", 
"1357.5", "550.5", "1456.5"), .Dim = c(10L, 10L), .Dimnames = list(
    c("NA_Pacific", "NA_Central", "NA_Atlantic", "Greenland", 
    "EU_NW", "EU_WM", "EU_BS.EM", "Asia_SW", "Asia_Central", 
    "Asia_East"), c("Asia_East", "Asia_Central", "Asia_SW", "EU_BS.EM", 
    "EU_WM", "EU_NW", "Greenland", "NA_Atlantic", "NA_Central", 
    "NA_Pacific")))
  1. 這幾乎創造了我想要實現的目標。 但是灰色很丑。 我如何將其更改為藍色? 用灰色代替藍色不起作用...

  2. 此外,它會將標簽打印到我在輸入表中指定的刻度上。 這適用於 y 軸,但不適用於 x 軸。 如何回收 y 軸刻度以將它們打印到 x 軸刻度(旋轉 90 度)?

  3. 最后,沿 x 軸(頂部和底部)有一點點空白。 雖然這不是真正的問題,但是消除它會很好。

我希望至少可以解決一些問題。 提前致謝。

我擺弄了很多,發現刻度標簽和矩陣定義現在工作得很好,因為我設法將row.names包含到矩陣中。 然而,在col.regions中使用 col.regions 的方式令人大開眼界! 我現在使用以下內容在levelplot中獲取顏色漸變:

ramp <- colorRamp(c("white", "blue"))

這將創建白色和藍色之間的漸變,但任何其他顏色都是可能的。 同時確定坡道的方向。 在這里,低值是白色,高值是藍色。 levelplot ,我將這個斜坡與col.regions一起使用,如下所示:

col.regions=rgb(ramp(seq(0, 1, length = 1000)), max = 255)

長度應設置為任何大的值,以使其大於矩陣中不同值的數量。 否則顏色會在熱圖中回收。 設置max=255定義了漸變中兩種顏色之間的整個范圍。 將其設置為較低的值將不起作用,因為它是我使用它的方式中可接受的最低值。 將其設置得更高會將斜坡的“黑暗”向上移動,這有時也可能很好。

也許不是一個非常專業的解決方案,但它對我的情況非常有效,我可以很好地控制我的色帶。 謝謝指點!

目前, matrix object 是一個字符矩陣,我希望 levelplot 與數字矩陣一起使用會更好,所以我做了:

matrix2 <-apply(matrix, 2, as.numeric)

1)您應該意識到grey是 function。 grey等其他顏色函數包括rgbhsv 也許... , col.regions=rgb(100) ) ... 假設您有 101 個不同的 x 值。 編輯:那是錯誤的。 rgb function 注意三個向量 arguments:試試這個:

col.regions = c(rgb(50:0/50, 0, 0),rgb(0,0:50/50,0) )  
     # ugly result but shows how to use two color ranges

2) 軸刻度標簽由 scales 參數的列表參數控制。 類似於... , scales=list(x=list(labels=<label=vector>, at=<tick-positions>) )東西。 這將不同於用於設置 z-breaks 的at

3)我猜你已經通過尺寸或額外值的一些不匹配創建了沿 x 軸的空白。 默認的 levelplot 不會創建空白。 需要您的 object 的這些詳細信息。 事實證明,當暗名是“字符”時存在空格,但當它們是 NULL 時不存在,所以試試這個:

rownames(matrix2) <- NULL
colnames(matrix2) <- NULL  # don't throw away matrix, we need its dimnames
levelplot(matrix2,col.regions = c(rgb(50:0/50, 0, 0),rgb(0,0:50/50,0) ), region=TRUE, 
    scales=list(x=list(rot=90, at=1:10, labels=rownames(matrix)), y=list( at=1:10, 
    labels=rownames(matrix)) ))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM