首页 文章

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

提问于
浏览
2

我的问题涉及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

问题是当我试图将它们两者都称为“group =”和“fill =”时,它们似乎相互干扰;当调用“group”时,ggplot似乎忽略了“fill”命令 .

对组的调用很重要,因为它强制y轴对每个面进行缩放,因此每个面内的密度总计为1.但是,我希望能够使用填充颜色在视觉上区分组 .

我该如何解决这个问题?

1 回答

  • 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 ,形状是相同的,但是比例看起来有点不同(我的整体略低) . 我不知道为什么 .

相关问题