r - 如何更改ggplot热图中空单元格的填充颜色

标签 r ggplot2 heatmap

我有一个数据集,其中 x 变量有一些缺失值。例如,下面的数据框显示 181930 和 610 有一组完整的 x 变量,1-7,而 1044、1114 等只有一个。

label   xvar value
181930  1    0
181930  2    0
181930  3    1
181930  4    0
181930  5    0
181930  6    0
181930  7    1
610  1    0
610  2    0
610  3    0
610  4    0
610  5    1
610  6    1
610  7    0
1044  1    0
1114  1    0
1156  1    1
1378  1    0
1834  1    1

我想使用 ggplot 生成一个热图,显示值为 1 的单元格。这是我到目前为止的代码,但是对于只有一个 xvar 的标签显示一个空白单元格,而我希望它具有颜色(白色)匹配 0 值。
ggplot(activeDF,aes(xvar,factor(label)))+
  geom_tile(aes(fill=value),colour='white')+ 
  scale_x_continuous(breaks=round(seq(0,7)))+
  scale_fill_gradient(high=brewer.pal(10,'PiYG')[8],low='white',na.value = 'white')

不幸的是, na.value 对我不起作用。这是一张照片:
plot

最佳答案

有时,在 ggplot2 中做某事的直接方法是在绘图之前操作数据集。在这种情况下,可以选择扩展数据集以使其包含要绘制的所有组合。

我用 tidyr::complete为此,以及来自包 dplyr 的分组。这为 xvar 添加了一行每个 label 从 1 到 7 .如果该行当前不存在,则用 NA 填充缺失值。 . NA似乎足以满足您的用例,但您也可以使用 fill将缺失值设置为 0 或其他值的参数。

library(dplyr)
library(tidyr)

longdf = activeDF %>%
     group_by(label) %>%
     complete(xvar = 1:7)

longdf

# A tibble: 49 x 3
# Groups:   label [7]
   label  xvar value
   <int> <int> <int>
 1   610     1     0
 2   610     2     0
 3   610     3     0
 4   610     4     0
 5   610     5     1
 6   610     6     1
 7   610     7     0
 8  1044     1     0
 9  1044     2    NA
10  1044     3    NA
# ... with 39 more rows

使用扩展的数据集,您的绘图现在扩展到整个数据范围,因此平铺已完成。
ggplot(longdf, aes(xvar, factor(label)) ) +
     geom_tile(aes(fill = value), colour = 'black') + 
     scale_x_continuous(breaks = round(seq(0, 7))) +
     scale_fill_gradient(high = brewer.pal(10, 'PiYG')[8], low='white', na.value = 'white')

enter image description here

关于r - 如何更改ggplot热图中空单元格的填充颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47172693/

相关文章:

r - 从 tibble (R, dplyr) 中的每一行中减去 1 行

r - 使用 RStudio Chromote 获取页面生成的 XHR 请求的响应正文的正确方法

r - 二进制数据热图

python - 将 pandas groupby 数据框转换为热图

r - 在 geom_hline 上方突出显示条形图颜色

python - R-Python : Getting Monthly, 每周索引点

r - 根据第三个变量向 ggplot2 绘图添加背景

matlab - 如何在 Matlab 中将颜色与热图中的值明确关联?

r - 带有 ggplot 的错误栏 - 出现错误

r - geom_tile 不再理解美学之外的宽度和高度