2016-11-07 7 views
0

私はfacet_grid()を使っていくつかのデータをプロットしています。"facet_grid"とオーバープロット:困惑している行動

私はggplotライブラリの初心者だと思っています。私は何かを見逃しているかもしれません。とにかく、ここにそれは行く。

と仮定すると、次のデータフレーム:

library(ggplot2) 

d1 <- runif(500) 
d2 <- runif(500)*10 
s1 <- sample(LETTERS[1:2], 500, replace = T, prob=c(0.3, 0.7)) 
s2 <- sample(letters[3:4], 500, replace = T, prob=c(0.4, 0.6)) 
df <- data.frame(s1, s2, d1, d2) 

次のようになります。彼らはカテゴリ値に従ってソートされるように

s2 s1 d1  d2 
c B 0.3434944 0.9881925 
d A 0.7847741 9.7759946 
d A 0.3142764 2.3654268 
... 

私はデータをプロット:

ggplot(df, aes(x=df$d1, y=df$d2)) + 
geom_point(col="red", cex=2) + 
facet_grid(d2 ~ d1) 

次のプロットの結果:

Plot 1

私は今、データのサブセットのみを重ねてプロットしたい、と私は、次の(ここでは単純化)のコードを使用:

geom_point(data=df[df$d2 > 7.5,], 
aes(x=df$d1[df$d2 > 7.5], y=df$d2[df$d2 > 7.5]), 
cex=1, colour=I("black")) 

次のプロットに結果として得られる:

Plot 2

しきい値を設定して、すべての値、たとえば「しきい値よりも大きい」が既存の値にプロットされることを期待しています。

これは当てはまりません。

実際、いくつかの既存の値には、しきい値が一致する値がありません。また、一部のしきい値設定値には、既存の値が一致していないものもあります。私が最も困惑しているのは、データポイントが同じデータフレームから来ていることが私の理解であり、最初のレイヤー(既存レイヤー)に2番目のレイヤーが含まれていると思います。私はここに何かを逃していますか

また、慎重に見ていると、プロットされた点は正しい2D位置に一致しますが、間違った象限にあります。

さらに不可解な:私は、次のサブセットをプロットした場合:

ggplot(df[df$d2 < 7.5,], aes(x=df$d1[df$d2 < 7.5], y=df$d2[df$d2 < 7.5])) + 
geom_point(col="red", cex=2) + 
facet_grid(d2 ~ d1) + 
geom_point(data=df[df$d2 > 7.5,], aes(x=df$d1[df$d2 > 7.5], y=df$d2[df$d2 > 7.5]), cex=1, colour=I("black")) 

、既存の値の一部は、その「閾値以下」に「閾値以上」領域から移動。誰もこのような行動を説明できますか?

ありがとうございます。

+0

あなたのコードは、再現可能ではありません。 'selpmas'、' samples'、 'ragdoll'、' llodgar'とは何ですか?ここを参照してくださいhttp://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-exampleそしてもう一つ行く: –

+0

それを指摘してくれてありがとう。私は最も重要な部分で編集を忘れてしまった。この "go"はうまくいくはずです。 – Elendhur

答えて

0

なぜあなたの問題のが表示されませんが、私はあなたのsubsetsがプロット機能内でファセットを認識していなかったと思います。 dataframeに新しいT/F列を作成することで、各個人の色とサイズを制御できます。facetこれはいいですか?正確に疑問に対処するために、中空のポイント、shape=21scale_fill_manualを使用

EDIT

df$d<-df$d2>7.5 

ggplot(data=df, aes(x=d1, y=d2,colour=d,size=d,fill=d))+ 
    facet_grid(s1~s2)+ 
    geom_point(show.legend=F,shape=21,size=2,stroke=1.5,col="red")+ 
    scale_fill_manual(values=setNames(c('black','red'),c(T,F))) 

enter image description here

+0

返事ありがとう、J.Con。あなたが提供した例は、投稿したコードの最後の部分と似ています。ここでは、データポイントを2つのサブグループ(しきい値より大きいか小さい)で分割しています。それでも、私が投稿したコードは、私が本当に理解できない方法でいくつかのデータポイントを誤って配置しています。 でも、私が実際に必要とするのは、赤い点と黒い点をすべて赤い点にプロットすることです。面白いのは、 'plot()'に続いて 'par(new = T)'を使い、閾値より大きいデータポイントだけをプロットすれば、それは完全に機能します。 – Elendhur

+0

私は 'facet_grid()'や 'ggplot()'が何らかの形で部分集合を混乱させているのではないかと思っています。 – Elendhur

+0

@Elendhur私はあなたのニーズに合った答えを編集しました。良い? –

関連する問題