在对数据进行子集化时保持着色

时间:2017-01-30 20:04:39

标签: r ggplot2

我希望对数据进行分组,但保留使用所有数据时生成的着色。

以下是所有数据:

ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) + 
    geom_point(shape = 21, aes(fill = Species), size=4, stroke=1)

产生:

enter image description here

但如果我在物种上进行子集,例如virginica,则颜色不会被保留:

ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) + 
    geom_point(data = subset(iris, Species=='virginica'), 
    shape = 21, aes(fill = Species), size=4, stroke=1)

enter image description here

我知道这可能是正确的默认行为,但我想保留配色用于演示目的。我怎么做到这一点?

奖励:保持相同的轴尺寸

1 个答案:

答案 0 :(得分:3)

一种方法是使用@alistaire建议的scale_fill_manual。另一种方法是防止丢弃因子级别,但是尽管每个级别都没有数据,但是这些级别的名称将包含在图例中,不确定是否需要。但无论您选择哪个子集,这都将提供数据集的完整图片。

 ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) + 
      geom_point(shape = 21, aes(fill = Species), size=4, stroke=1)

 ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) + 
      geom_point(data = subset(iris, Species %in% c('virginica', 'setosa')), 
                 shape = 21, aes(fill = Species), size=4, stroke=1) +
      scale_fill_discrete(drop = FALSE)

enter image description here

ggplot(iris, aes(x=Sepal.Length, y=Sepal.Width)) + 
      geom_point(data = subset(iris, Species=='virginica'), 
                 shape = 21, aes(fill = Species), size=4, stroke=1) +
      scale_fill_discrete(drop = FALSE)

enter image description here