4

概要: 自動生成された凡例を失うことなく、ggplot2() 密度分布プロットの色を選択したいと考えています。

詳細: 次のコードで作成されたデータフレームがあります (エレガントではないことに気付きましたが、R のみを学習しています)。

cands<-scan("human.i.cands.degnums")
non<-scan("human.i.non.degnums")
df<-data.frame(grp=factor(c(rep("1. Candidates", each=length(cands)),
           rep("2. NonCands",each=length(non)))), val=c(cands,non))

次に、密度分布を次のようにプロットします。

library(ggplot2)
ggplot(df, aes(x=val,color=grp)) + geom_density() 

これにより、次の出力が生成されます。

ここに画像の説明を入力

線が表示される色を選択したいのですが、私の人生ではその方法を理解できません。サイトで他のさまざまな投稿を読みましたが、役に立ちませんでした。最も関連性の高いものは次のとおりです。

しばらく探し回った後、私は試しました:

## This one gives an error
ggplot(df, aes(x=val,colour=c("red","blue"))) + geom_density() 
Error: Aesthetics must either be length one, or the same length as the dataProblems:c("red", "blue")

## This one produces a single, black line
ggplot(df, aes(x=val),colour=c("red","green")) + geom_density() 

私が思いついた最高のものはこれです:

ggplot() + geom_density(aes(x=cands),colour="blue")  + geom_density(aes(x=non),colour="red")

ここに画像の説明を入力 上の画像でわかるように、最後のコマンドは線の色を正しく変更しますが凡例は削除します。ggplot2 の凡例システムが気に入っています。それは素晴らしくシンプルです.ggplotが明らかにできることを再作成することをいじる必要はありません. その上、構文は非常に醜いです。私の実際のデータ フレームは、7 つの異なるデータ グループで構成されています。+ geom_density(aes(x=FOO),colour="BAR")7回書くことがこれをコーディングする最もエレガントな方法だとは信じられません。

したがって、他のすべてが失敗した場合は、凡例を2番目のプロットに戻す方法を教えてくれる答えで受け入れます. しかし、誰かがそれを適切に行う方法を教えてくれれば、私はとても幸せです.

4

2 に答える 2

7
set.seed(45)
df <- data.frame(x=c(rnorm(100), rnorm(100, mean=2, sd=2)), grp=rep(1:2, each=100))
ggplot(data = df, aes(x=x, color=factor(grp))) + geom_density() + 
                scale_color_brewer(palette = "Set1")

ggplot(data = df, aes(x=x, color=factor(grp))) + geom_density() + 
                scale_color_brewer(palette = "Set3")

色のセットが異なる同じプロットが表示されます。

于 2013-01-23T23:00:24.820 に答える