2017-08-15 203 views
1

我想用ggplot熱圖無顏色變化

library(ggplot2) 

my_df <- data.frame(var_1 = sample(c('a','b', 'c'), 1000, replace = TRUE), 
        var_2 = sample(c('foo', 'bar', 'foo_bar'), 1000, replace = TRUE), 
        var_3 = sample(c(1,0), 1000, replace = TRUE)) 

ggplot(data = my_df, aes(x = var_1, y = var_2, fill = var_3)) + 
    geom_tile() 

這裏是我所得到的繪製簡單的熱圖: Heat map

我能不明白的地方,沒有顏色變化。我改變了sample函數中的行數,但在熱圖中總是隻接收到兩種顏色。有什麼建議麼?

回答

2

替換geom_tile與計算你的願望,統計變換圖層:

ggplot(data = my_df, aes(x = var_1, y = var_2)) + 
    stat_summary_2d(fun = "mean", geom = "tile", 
        aes(z = var_3, fill = ..value..)) 

enter image description here

3

這是因爲您選擇輸入的唯一值是0或1從您的向量在var_3 = sample(c(1,0), 1000, replace = TRUE)。相反,如果你想在0和1之間選擇值,使用此代碼來代替:

var_3 = sample(0:10, 1000, replace = TRUE)/10

+0

謝謝,我如何讓'fill'反映1和0的比例。我知道如何手動執行,我不知道'ggplot'能否自動執行。 – user1700890

+0

你是什麼意思?不應該在設置'fill = var_3'時自動發生? – sweetmusicality

2

要繪製的1和0的因素的比例,你需要計算的var_3平均爲每個組合var_1var_2。在這裏,我展示瞭如何做到這一點使用data.table,雖然你也可以使用dplyr.summariseaggregate從基地R.

library(data.table) 
setDT(my_df) 
ggplot(data = my_df[, var_3 := mean(var_3), by = .(var_1,var_2)], 
     aes(x = var_1, y = var_2, fill = var_3)) + 
    geom_tile()