【问题标题】:ggplot heat map with geom_tile using weight for fill colorggplot 热图与 geom_tile 使用权重填充颜色
【发布时间】:2016-08-21 14:25:27
【问题描述】:

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

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 这似乎是要走的路,除了我不知道如何让fill 颜色基于与@ 一起使用的权重(每个bin 的总z) 987654328@。以下使用基于z 的填充,但不是总和。您可以看到 (12,6) bin 的值的差异,即 8 而不是 16。

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

我错过了什么?

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    使用因子将使带有stat_bin_2d的图块居中:

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

    【讨论】:

      【解决方案2】:

      我会预处理数据以计算总和

      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")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-05-11
        • 1970-01-01
        • 1970-01-01
        • 2022-01-17
        • 1970-01-01
        • 2020-10-03
        • 1970-01-01
        相关资源
        最近更新 更多