2013-04-05 11 views
15

ggplotとfacetingを使用して、因子でグループ化された一連の密度プロットを作成します。さらに、ファセットによって課せられた制約を受けないファセットのそれぞれに別の密度プロットをレイヤーしたいと思います。ggplot2:ggplot内のすべてのファセットに1つのプロットをオーバーレイする方法はありますか?

例えば、多面的なプロットは次のようになります。

require(ggplot2) 
ggplot(diamonds, aes(price)) + facet_grid(.~clarity) + geom_density() 

そして私は、ファセットのそれぞれの上に重ね、次の単一密度プロットを持っているしたいと思います:

ggplot(diamonds, aes(price)) + geom_density() 

さらに、これを行う最善の方法としてファセットを使用したggplotがありますか、または好んだ方法がありますか?これを達成するための

答えて

18

一つの方法は、単に列priceとを含む新しいデータフレームdiamonds2を作ることであろう2つのgeom_density()通話 - 1つのオリジナルdiamondsを使用し、第二それはdiamonds2を使用します。 diamonds2のように、列がありませんclarityすべての値がすべてのファセットで使用されます。

diamonds2<-diamonds["price"] 
ggplot(diamonds, aes(price)) + geom_density()+facet_grid(.~clarity) + 
    geom_density(data=diamonds2,aes(price),colour="blue") 

enter image description here

UPDATEは - @BrianDiggsによって示唆されるように同じ結果が新たなデータフレームを作成するが、geom_density()内部にそれを変換することなく達成することができます。

ggplot(diamonds, aes(price)) + geom_density()+facet_grid(.~clarity) + 
    geom_density(data=transform(diamonds, clarity=NULL),aes(price),colour="blue") 

もう1つの方法は、ファセッティングなしでデータをプロットすることです。 geom_density()への2つの呼び出しを追加します。aes(color=clarity)を追加すると、レベルごとに異なる色の濃度線をclarityに追加し、空白のままにして全体の黒線を追加します。

ggplot(diamonds,aes(price))+geom_density(aes(color=clarity))+geom_density() 

enter image description here

+0

偉大な答えをいただき、ありがとうございます。私は十分な評判を持っていれば、私はupvote :)乾杯。 – skleene

+0

最初のアプローチではわずかな違いがあります。名前をつけた 'diamonds2'を先に作る必要はありません。 2番目の 'geom_density()'のデータ引数にインラインで宣言することができます: 'data = transform(diamonds、clarity = NULL)' –

+0

@BrianDiggsありがとう。投稿された回答の後も同様の考えがありましたが、他のデータにはこの列がなく、より一般的であることを示すためにこの方法を残すことに決めました(利用可能な他のデータフレームがある場合)。 –

関連する問題