2011-06-07 29 views
2

我正在處理我的情節上的一些細節,並找到了一個我無法解決的問題。在我的等級圖上是數字標記。現在我想讓我的y軸上的tickmarks改爲相應的字母。 (即1 = A,5 = E,27 = AA,29 = AC,...)將數字標記更改爲水平圖上的字母

我已經使用

scales=list(
    y=list(alternating=3,labels=toupper(c(letters[1],letters[5],letters[10],letters[15]))))) 

但我希望他們根據在Y什麼改變軸,而不是從我給的價值。 有人可以幫我解決這個問題嗎?

levelplot(volcano,main="levelplot(volcano)") 

enter image description here

+0

你可以簡化'在toupper(C(字母[1],字母[5],字母[10],字母[15]))'到'字母[c(1,5,10,15)]'。 – Marek 2011-06-07 07:45:33

回答

4

上聊天的一些討論指出levelplot()處理熱圖的情況下(其中一個或兩個變量是離散/分類)就好了。因此,我們只需要將數據轉換爲正確的格式即可。做到這一點的一種方法是至少將y座標存儲爲適當級別的因子。

首先,模擬沿OP的數據的行的某些數據:

yholes <- c(LETTERS, sort(outer(LETTERS, LETTERS, paste, sep="")))[1:30] 
xholes <- seq_along(yholes) 
g <- expand.grid(X = xholes, Y = yholes) 
set.seed(2) 
dat <- with(g, data.frame(Y = factor(Y, levels = yholes), 
          X = X, 
          vals = runif(900))) 

其給出:

R> head(dat) 
    Y X  vals 
1 A 1 0.1848823 
2 A 2 0.7023740 
3 A 3 0.5733263 
4 A 4 0.1680519 
5 A 5 0.9438393 
6 A 6 0.9434750 

的原因expand.grid()呼叫是levelplot(),經由式方法中使用時,我將要使用的每個數據點(在這種情況下爲900)需要YX

情節然後容易在levelplot()通過一個簡單的公式產生:

require(lattice) 
levelplot(vals ~ X + Y, data = dat) 

其產生這樣的:

levelplot produced by the code

7

不是一般的解決方案。使用pretty自行計算at

y_at <- pretty(seq_len(ncol(volcano))) 
y_labels <- c(LETTERS, outer(LETTERS, LETTERS, paste, sep="")) 
levelplot(
    volcano, main="levelplot(volcano)", 
    scales=list(y=list(
     alternating=3, 
     labels=y_labels[round(y_at)], 
     at=y_at 
    )) 
) 

Lattice levelplot with change y axis

+0

+1優秀的解決方案 – 2011-06-07 08:21:39

相關問題