2016-08-12 107 views
0

這是在我的數據如何使不同顏色的熱圖

df<- structure(list(name = structure(c(2L, 12L, 1L, 16L, 14L, 10L, 
9L, 5L, 15L, 4L, 8L, 13L, 7L, 6L, 3L, 11L), .Label = c("All", 
"Bab", "boro", "bra", "charli", "delta", "few", "hora", "Howe", 
"ist", "kind", "Kiss", "myr", "No", "TT", "where"), class = "factor"), 
    value = c(1.251, -1.018, -1.074, -1.137, 1.018, 1.293, 1.022, 
    -1.008, 1.022, 1.252, -1.005, 1.694, -1.068, 1.396, 1.646, 
    1.016)), .Names = c("name", "value"), class = "data.frame", row.names = c(NA, 
-16L)) 

我想有非常明確的遮陽分離。 如果我想和特定顏色的熱圖,我不喜歡這個

ggplot(df, aes(x = 1,y = name, fill = value)) + 
    geom_tile() + 
    ylab("") + 
    scale_fill_gradient(low='red', high='blue') 

它使紅色到藍色。我想要的是使前7行例如紅色到藍色和其餘粉紅色到黑色。

這可能嗎?

+0

對我來說不是很明顯怎麼做到這一點。一個黑客可能會設置alpha,並使用geom_rect來給出不同的背景顏色 –

+0

「前7行」,你的意思是前7行「df」或劇情的前7行,或者底部7行?一個想法是有2個地塊,然後使用「柵格」進行佈局。 –

+0

@Weihuang Wong排名前7位的情節 – nik

回答

1

ggplot通常會鼓勵每個數據序列具有一個標度,但是如果您真的想爲不同的值的不同子集設置不同的標度,可以採用以下方法之一。

你說你想爲前7行不同的比例。再次強調,將演示文稿與數據的位置綁定並不是一個好習慣,但假設我們創建了一個「組」列。由於我們將使用它來「欺騙」熱圖中的值,因此這一列很重要。這樣分開分發一組組值將是一件好事:

library(dplyr) 
df <- arrange(df, name) %>% 
    mutate(group = c(rep(-3, 7), rep(3, 9))) 

fill美學就變成value - group,我們用scale_fill_gradientn指定顏色:

ggplot(df, aes(x = 1,y = name, fill = value - group)) + 
    geom_tile() + 
    ylab("") + 
    scale_fill_gradientn(colours = c('black', 'pink', 'red', 'blue')) 

,讓你這樣的情節: enter image description here

+0

謝謝,給我一些時間,我會檢查出來,如果它給了我答案,我會definelty接受它 – nik