我有一个基于 ggplot2 的热图,可以显示某些因素的出现次数。但是,不同的数据集有时没有某些因素的实例,这意味着它们各自的热图看起来会有所不同。为了使并排比较更容易,我想添加缺失的级别。不幸的是,我没有成功。
所以,我有如下数据:
> head(numRules)
Job Generation NumRules
1 0 0 2
2 0 1 1
3 0 2 1
4 0 3 1
5 0 4 1
6 0 5 1
> levels(factor(numRules$NumRules))
[1] "1" "2" "3"
我使用以下代码来呈现一个漂亮的热图,它计算所有作业的每代规则数:
ggplot(subset(numRules, Generation < 21), aes(x=Generation, y=factor(NumRules))) +
stat_bin(aes(fill=..count..), geom="tile", binwidth=1, position="identity") +
ylab('Number of Rules')
所以热图是说大多数时候运行对于给定的一代只有一个规则,但有时你会得到两个,在极少数情况下你会得到三个。
现在,对于给定的一代,一组完全不同的运行实际上可能具有零规则。但是,进行并排比较会有点混乱,因为一个热图的 y 轴具有 [1,3] 中的规则数,而另一个可能在 [0,2] 中。我想做的是标准化热图,以便它们都具有(0,1,2,3)中的因子级别,而不管规则的数量。例如,我想重新渲染上面的热图以包含零规则行,即使在该特定数据帧中没有这样的实例。
我已经用各种 R 咒语来解决这个问题,包括设置休息时间和音阶等等,但无济于事。我的直觉是有一个简单的解决方案,但我找不到它。
更新:
如果我在调用中手动指定级别,factor
我确实会为零规则添加一行:
ggplot(subset(numRules, Generation < 21), aes(x=Generation, y=factor(NumRules,levels=c("0","1","2","3")))) + stat_bin(aes(fill=..count..), geom="tile", binwidth=1, position="identity") + ylab('Number of Rules')
这产生了这个。
不幸的是,正如您所看到的,这个新行没有正确着色。到达那里!