我有一个基于 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')
它会产生 这个。
不幸的是,正如您所见,新行的颜色没有正确地呈现。到达那里!