正确使用scale_fill_manual()在ggplot2中创建多色直方图条?

时间:2014-03-17 22:07:12

标签: r ggplot2

我有一系列我想在R中探索的数据文件,我打算用它来生成一个带有列变量的数据框,为了这个问题,我将标记为{ {1}}。 foo的范围位于区间[0,7000]。作为我的数据探索练习的一部分,我想创建一个foo的一维直方图,但有一点点扭曲:foo在(1000,7000)之间的范围内的值特别“有趣”到我,因此我想使用颜色调色板对该数据范围中的单个直方图条进行颜色编码(即,因为稍后我最终打算重复使用相同的调色板来映射我暂时从其他列中删除的其他列的数据数据框是为了让我的问题变得不必要地变得复杂了。相反,{0,1000]范围内foo的值对我来说并不那么有趣,但是我仍然希望能够在存在任何值的情况下,在直方图中看到它们,尽管是灰色的。

在下面的代码示例中,我生成了一个人工样本数据框,并尝试使用foo绘制直方图,使用ggplot2选择填充颜色。我确实得到了一个多色的直方图,但它看起来并不像预期的那样:scale_fill_manual()似乎忽略了我在颜色之间放置断点的指示。具体来说,问题似乎与丢失的数据有关:碰巧没有数据的间隔似乎没有映射到颜色,尽管我的意图是它们应该是。这也意味着颜色灰色最终会被映射到区间(1000,1500),而不是像我预期的那样[0,1000]。

我的问题:如何强制ggplot2将特定的颜色填充代码分配给特定的数据范围,即使某些间隔为空并且没有数据,因此不会生成与这些间隔对应的直方图条?

下面我已经包含了我的代码的初始版本,以及一个虚拟示例数据框以及它生成的输出的手工注释版本。

ggplot2

Hand-annotated sample output

1 个答案:

答案 0 :(得分:9)

您可以将drop参数设置为FALSE。请参阅?discrete_scaledrop unused factor levels from the scale (TRUE or FALSE)

ggplot(df, aes(foo)) +
  geom_histogram(aes(fill = colcode), binwidth = bwdth) +
  scale_fill_manual("", breaks = brk, values = colors, drop = FALSE)

enter image description here