4

私からの最初の質問、それが正しく表現されていることを願っています。これには何も見つからなかったので、弾丸を噛みます。

geom_tileの組み合わせごとに、合計が1になる5つの変数があるプロットを作成したいと思います。それぞれの組み合わせの正方形の色に、どの数字が最も大きいかを反映させたいのですが。たとえば、5つの変数、、、、およびがあるとします。との場合、正方形は青になり、の場合と赤の場合などになります。との場合、その他がゼロの場合、補間された色(つまり紫)になります。おそらくもっと良いのは、赤と青のハッチングですが、それがで可能かどうかはわかりません。xyzx-yzzabcdea=1b=c=d=e=0b=1a=c=d=e=0a=b=0.5ggplot

どうすればいいのかわかりません。5つのプロットを重ねてプロットすることを考えましgeom_tileた。各プロットは異なる色であり、アルファはたとえばaの値によってスケーリングされます(したがって、セルは透明である場合は透明で、a = 0色が強い場合a = 1)。カラーランプを使ってそれを行う方法もあるかもしれませんが、私もそこに空白を描きました。

誰かが頭のてっぺんからこれを行う方法を見ることができれば、私は大いに義務づけられるでしょう。これが私の実際のデータと同じ形式の乱数のデータセットです。

rand <- matrix(runif(50*50*5), ncol=5, nrow=50*50)
rand <- rand / apply(rand, 1, sum) # Make sure the numbers sum to one in each row
d <- data.frame(a = rand[,1],
                b = rand[,2],
                c = rand[,3],
                d = rand[,4],
                e = rand[,5],
                expand.grid(x = 1:50, y = 1:50))

更新:sebastian-cからの最初の回答と私自身のデータセットを使用することで、この図を作成することができました。パッケージRColorBrewerの関数brewer.pal(5、 "Spectral")を使用して色を取得しました。カスタムの凡例が必要ですが、それ以外の場合はかなり満足しています。単色は、純粋な「進化的に安定した戦略」(ESS、つまり、変異戦略では打ち負かされない戦略)を示しています。重なり合う色の領域は、平衡が2つ以上の戦略の安定したバランスである混合ESSを示します。

重複したgeom_tileプロットESS

4

1 に答える 1

1

私はあなたの例を3列に少し単純化する自由を取りました。正直なところ、これは2つ以上ではうまく機能しないと思いますが、これが私がそれについて行った方法です。また、アルファチャネルを悪用したため、タイルを別の順序で配置すると、色が変わります。これは、他の誰かの出発点としてうまくいくはずです。まず、データを生成します。

set.seed(100)

rand <- matrix(runif(100*3), ncol=3, nrow=100)
rand <- rand / apply(rand, 1, sum) # Make sure the numbers sum to one in each row
d <- data.frame(a = rand[,1],
                b = rand[,2],
                c = rand[,3],
                expand.grid(x=1:10, y=1:10))

今プロットのために:

ggplot(d, aes(x=x, y=y))+
  theme_bw() + #For a clearer background
  geom_tile(alpha=d$a, fill="red")+
  geom_tile(alpha=d$b, fill="blue")+
  geom_tile(alpha=d$c, fill="green")+
  theme(panel.grid.major=element_blank())

ここに画像の説明を入力してください

赤、緑、青の量を3列で使用することを考えていましたが、これは3列を超える場合は機能しません。

編集:最大3列の特定のソリューション(私は青と緑を混ぜ合わせました):

d2 <- data.frame(col=rgb(rand), expand.grid(x=1:10, y=1:10))

ggplot(d2, aes(x=x, y=y)) +
  theme_bw()+
  geom_tile(aes(fill=col))+
  scale_fill_identity()

ここに画像の説明を入力してください

赤、緑、青のいずれかを0に設定すると、2色でこれを行うことができます。

于 2013-01-24T08:07:07.380 に答える