我有一个数据集,其中 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 对我不起作用。这是一张照片:
最佳答案
有时,在 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')
关于r - 如何更改ggplot热图中空单元格的填充颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47172693/