4

次のように作成した 2 つの重複する密度関数があります。

require(ggplot2)
set.seed(2)
a =rnorm(100)
b = rnorm(100,.5,1.2)
c = rnorm(100,.3,1.2)
data <- rbind( data.frame(type="a", lr=a), data.frame(type="b", lr=b))
data2 <- rbind( data.frame(type="b", lr=b), data.frame(type="c", lr=c))
m <- ggplot(data, aes(x=lr))
m <- m + geom_density(aes(fill=factor(type)), size=2, alpha=.4) 
m2 <- ggplot(data2, aes(x=lr))
m2 <- m2 + geom_density(aes(fill=factor(type)), size=2, alpha=.4)

次の 2 つの素敵なプロットが生成されます。

m

ここに画像の説明を入力

m2

ここに画像の説明を入力

私の問題は、ggplot が赤と青の色をアルファベット順に決定することです。最初の「b」は青ですが、2 番目の「b」は赤です。「b」を強制的に赤くする方法がわかりません。それぞれの色を選択するにはどうすればよいですか?

4

1 に答える 1

2

すべてのグループに 1 つの色

両方の密度プロットを赤くしたいようです。その場合、以下のように、group代わりにfillwithinを使用aesしてグループ化変数を示し、fillグラフ全体の色を設定できます。

m <- m + geom_density(aes(group=factor(type)), fill="#ff0000", size=2, alpha=.4)

各グループの特定の色

しかし、実際に各グループに特定の色を設定しようとしている場合は、scale_fill_manual. これを行うには 2 つの方法があります。名前付きの色のベクトルを使用するか、2 つのベクトル (1 つは色を使用し、もう 1 つはグループ名を使用) を使用します。これはドキュメントからのものです:

valuesデータ値をマッピングする美的価値のセット。これが名前付きベクターの場合、値は名前に基づいて照合されます。名前が指定されていない場合、値はスケールの範囲内の順序 (通常はアルファベット順) で照合されます。一致しないデータ値はすべて与えられna.valueます。

1. 名前付きベクターの使用

groupColors <- c(a="#00ff00", b="#ff0000", c="#0000ff")

m <- ggplot(data, aes(x=lr))
m <- m + geom_density(aes(fill=factor(type)), size=2, alpha=.4) + 
  scale_fill_manual(values=groupColors)
m2 <- ggplot(data2, aes(x=lr))
m2 <- m2 + geom_density(aes(fill=factor(type)), size=2, alpha=.4) +
  scale_fill_manual(values=groupColors)

2. 2 つのベクトルの使用

groupLimits <- c("a", "b", "c")
groupColors <- c("#00ff00", "#ff0000", "#0000ff")

m <- ggplot(data, aes(x=lr))
m <- m + geom_density(aes(fill=factor(type)), size=2, alpha=.4) + 
  scale_fill_manual(values=groupColors, limits=groupLimits)
m2 <- ggplot(data2, aes(x=lr))
m2 <- m2 + geom_density(aes(fill=factor(type)), size=2, alpha=.4) +
  scale_fill_manual(values=groupColors, limits=groupLimits)

このアプローチの重要な違いの 1 つはgroupLimits、異なるグループが凡例に表示される順序を制御することです (この場合、3 つのグループすべてが強制的に表示されます)。

于 2014-02-24T22:15:29.383 に答える