使用geom_tile的ggplot热图使用填充颜色的重量

时间:2016-08-21 14:25:28

标签: r ggplot2

我正在尝试使用三个变量获得热图:坐标为离散(x,y),重量为z。我希望箱子/瓷砖的颜色取决于总和。我的结果如下:

x1 <- c(icecream = 3, jelly = 4, fruit = 5)
x1[order(factor(names(x1), levels = c("jelly", "fruit", "icecream")))]
#   jelly    fruit icecream 
#      4        5        3 

enter image description here

这不完全是我想要的,因为这些箱子被压缩到一个不够大的空间中,并且它们没有居中到坐标上。

我发现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 这似乎是要走的路,除了我无法弄清楚如何让geom_tile颜色基于权重(每个bin的总和z)为它适用于fill。以下使用基于stat_bin2d的填充但不是总和。您可以看到(12,6)bin的值的差异,即8而不是16。

z

enter image description here

我错过了什么?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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")