2016-08-21 109 views
1

我想要使用三個變量得到熱圖:離散(x,y)座標和z是一個重量。我希望垃圾箱/瓷磚的顏色取決於總和。我得到一個體面的結果如下:ggplot與geom_tile使用重量填充顏色的熱圖

x = c(8, 9, 10, 11, 12, 12) 
y = c(3, 4, 5, 6, 6, 6) 
z = c(1, 4, 2, 2, 8, 8) 

dd <- data.frame(x,y,z) 
p <- ggplot(dd, aes(x=x,y=y,weight=z)) + 
    stat_bin2d(bins=c(5,4)) 
p 

enter image description here

這不正是我想要的,因爲倉擠進這是不是真的足夠大的空間,並且他們不會集中到座標。

我發現geom_tile這似乎是要走的路,但我無法弄清楚如何獲得fill顏色要根據重量(每個箱概括Z),因爲它與stat_bin2d工作。以下使用基於z的填充,但不是總和。你可以看到在(12,6)倉的值之差是8,而不是16

p <- ggplot(dd, aes(x=x,y=y,weight=z)) + 
     geom_tile(aes(fill=z)) + 
     scale_fill_gradient(low = "black", high = "steelblue") 

enter image description here

我缺少什麼?

回答

4

使用因素將集中在瓷磚stat_bin_2d

p <- ggplot(dd, aes(x=as.factor(x),y=as.factor(y),weight=z)) + 
    stat_bin2d() 
p 

enter image description here

3

我將預處理的數據來計算的款項

library(ggplot2) 
library(dplyr) 

dd %>% 
    group_by(x, y) %>% 
    summarise(z = sum(z)) %>% 
    ggplot(aes(x=x,y=y,fill=z)) + 
    geom_tile() + 
    scale_fill_gradient(low = "black", high = "steelblue")