我正在尝试使用三个变量获得热图:坐标为离散(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
这不完全是我想要的,因为这些箱子被压缩到一个不够大的空间中,并且它们没有居中到坐标上。
我发现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
我错过了什么?
答案 0 :(得分:4)
使用因子会使切片居中stat_bin_2d
:
p <- ggplot(dd, aes(x=as.factor(x),y=as.factor(y),weight=z)) +
stat_bin2d()
p
答案 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")