如何根据分面条形图的分类变量因子进行着色?

时间:2014-08-21 18:51:19

标签: r ggplot2

我的问题与ggplot中的情节有关。如果您加载"钻石,则运行每张图片下方的代码应该有效。 ggplot2附带的数据集。

我正在尝试生成这样的图表:

Barplot of colors faceted by cut

library(ggplot2)

#First plot
p1 <- ggplot(diamonds, aes(color)) + geom_bar(aes(group = cut, y = ..density..))
p1 <- p1 + facet_wrap(~cut)
p1

但是我想按因子为每个方面的每个条形图着色,如下图所示:

Color example

#Second plot
p2 <- ggplot(diamonds, aes(color)) + geom_bar(aes( y = ..density.., fill = color)) 
p2 <- p2 + facet_wrap(~cut)
p2

问题在于&#34; group =&#34;和&#34; fill =&#34;当我试图打电话给他们时,他们似乎互相干扰; ggplot似乎忽略了&#34; fill&#34;命令&#34; group&#34;也被称为。

对组的调用非常重要,因为它会强制y轴按比例缩放每个方面,因此每个方面内的密度总计为1.但是,我希望能够在视觉上轻松区分组使用填充颜色。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

问题在于..density..。它通常是一种方便的捷径,但在像这样的更复杂的情况下,通常更容易自己计算:

library(dplyr)
diam2 <- diamonds %>% group_by(cut) %>% 
    mutate(ncut = n()) %>%
    group_by(cut, color) %>%
    summarize(den = n() / first(ncut))

ggplot(diam2, aes(x = color, fill = color, y = den)) +
    geom_bar(stat = "identity") +
    facet_wrap(~ cut)

我应该补充一下,将我的情节与你的p1进行比较,形状是相同的但是尺度看起来有点不同(我的整体略低)。我不确定为什么。