将条形图层添加到热图(geom_tile)

时间:2017-12-15 14:12:51

标签: r ggplot2 bar-chart heatmap

因此,如标题中所述,我想在我的热图中再添加1个可视图层。 Input

示例数据来自TextView

mpg

两个类别作为主轴 - class和drv。 数量只是每个等级和drv交叉点的汽车数量。 Isnew是新车(2008年对1999年)的一部分。

library(tidyverse) # for dplyr and ggplot2

data <- mpg %>% 
    mutate(quantity = 1, isnew = ifelse(year == 2008, 1, 0)) %>% 
    group_by(drv, class) %>% 
    summarise(quantity = sum(quantity), isnew = round(sum(isnew) / quantity, 2))

热图

     drv      class quantity isnew
   <chr>      <chr>    <dbl> <dbl>
 1     4    compact       12  0.67
 2     4    midsize        3  0.67
 3     4     pickup       33  0.52
 4     4 subcompact        4  0.00
 5     4        suv       51  0.53
 6     f    compact       35  0.40
 7     f    midsize       38  0.50
 8     f    minivan       11  0.45
 9     f subcompact       22  0.50
10     r    2seater        5  0.60
11     r subcompact        9  0.56
12     r        suv       11  0.55

我希望实现的是将每个部分的文本值更改为堆积条形。 每个条形图的顶部块必须是透明的,以保存热图的初始颜色。底部必须代表热图的该扇区的ggplot(data, aes(class, drv)) + geom_tile(aes(fill = quantity)) + geom_text(aes(label = isnew)) 值。

在Paint 8p

中绘制一些所需输出的部分(只是几个条,但我想要它们全部)

Output

发现in here可能可以通过isnew包完成。但它似乎已被弃用,并且&#34;嵌入ggplot2图形&#34;如Grolemund github所述。

1 个答案:

答案 0 :(得分:1)

这个情节对我来说似乎很混乱,但是我无法抗拒制造它。我们使用geom_segment来创建条形码,并使用基础drv因子编码将条形和文本标签放置在y轴上的适当位置。

ggplot(data, aes(class, drv)) + 
  geom_tile(aes(fill = quantity), colour="white", size=0.5) + 
  geom_segment(aes(y=as.numeric(as.factor(drv)) - 0.5, 
                   yend=as.numeric(as.factor(drv)) - 0.5 + isnew,
                   x=class, xend=class),
               colour="yellow", size=10) +
  geom_text(aes(label = isnew, y=(2*as.numeric(as.factor(drv)) + isnew)/2 - 0.5),
            colour="grey30", size=3) + 
  theme_classic()

enter image description here

或许使用尺寸美的geom_point会更好:

ggplot(data, aes(class, drv)) + 
  geom_tile(aes(fill = quantity), colour="white", size=0.5) + 
  geom_point(aes(size=isnew), shape=21, fill="white") +
  scale_size_continuous(range=c(1,10)) +
  theme_classic() 

enter image description here