2017-01-30 10 views
1

データをサブセット化したいが、すべてのデータを使用するときに生成された色付けを維持したい。データをサブセット化するときに色付けを維持

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

これはおそらく正しいデフォルトの動作であると理解しますが、プレゼンテーションの目的でカラースキームを維持したいと思います。どうすればこれを達成できますか?

ボーナスも同じ軸寸法を維持

+0

例えば、どのような値で何が起こっ色を指定するために '' scale_fill_ *関数を使用してください'scale_fill_manual(値= c( 'virginica' = 'dodgerblue'))' – alistaire

答えて

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

関連する問題