web-dev-qa-db-ja.com

R:ggplotを使用した単一グラフ上の2つの散布図

私はRの初心者であることに注意してください。merge()メソッドを使用して、2つのデータフレームを1つの共通の列にマージしました。次のようなデータフレームを取得しました。

 x   y1   y2
 1   3    5
 2   2    4
 1   2    2
 3   5    5
 ...

など。このようなデータフレームをggplotでプロットしたいと思います。私が作成したもの( geom_point のドキュメントを使用して

ggplot(data = dat_c, aes(games, variance.x)) + 
     geom_point(aes(x = games, y = variance.x), legend=  TRUE,  xlab="X", ylab="Y", colour=alpha('red', 0.05)) + 
     geom_point(aes(x = games, y = variance.y), legend = TRUE, colour=alpha('blue', 0.05) )

それは機能します。NaNは無視されるという警告を受け取るので邪魔になりません。これは問題ありません。ただし、2つの問題があり、それらを修正する方法がわかりません。

  1. 私の実際のプロットは左下隅にあります。X軸とY軸の最大値を設定したいと思います(動的な方法で、たとえば、データからの最大値+ 100など)
  2. 凡例は表示されません
  3. 軸は記述されていません

これがどのように見えるかです: enter image description here

14
mkk

参照:

(これらは_[r] ggplot melt_を検索した結果ですが、_[r] ggplot legend_を介してそこに到達した可能性もあります...)

可能であれば、ggplotの本のコピーを入手して、最初から読んでください。残念ながら、ドラフトのPDFはオンラインでは利用できなくなりましたが、本の価値はあります。投資。

  1. 実際には、プロットの両端近くにxyの値を持ついくつかのポイントがあります。それらはほぼ透明であるため、見づらいだけです(白い背景で見やすくなります。つまり、+theme_bw()ggplot呼び出しに追加してみてください)。プロットの範囲を制限する場合は、xlimおよびylimを使用できます。 (データでsummaryを試して、最大値を確認してください...)

  2. 軸を描画する最良の方法は、データをカテゴリ(_y1_ vs _y2_)の1つの列を持つ長い形式のデータセットに「溶かす」というggplotイディオムに従うことです。 )および値の別の次のように:


_  d <- data.frame(x=c(1,2,1,3),
                y1=c(3,2,2,5),
                y2=c(5,4,2,5))
  library(ggplot2) 
  library(reshape2) ## for melt()
  dm  <- melt(d,id.var=1)
  ggplot(data=dm,aes(x,value,colour=variable))+
  geom_point(alpha=0.2)+
  scale_colour_manual(values=c("red","blue"))+
  labs(x="games",y="variance")
_

(少し奇妙なフォーマットで申し訳ありません)alphaの値を少し高く設定しました。そうしないと、図のポイントがわかりにくくなるためです。デフォルトの色(赤みがかった色と青みがかった色)は問題ないと思いますが、_scale_colour_manual_を使用して指定した方法で色を取得しました。 enter image description here

  1. どういう意味かわかりません。
11
Ben Bolker

データを長い形式にmeltしてから、色の美学を溶融したdata.frameの可変列にマッピングする必要があります。このようなもの:

_dat <- data.frame(x = c(1,2,1,3), y1 = c(3,2,2,5), y2 = c(5,4,2,5))

dat.m <- melt(dat, id.vars = "x")

ggplot(dat.m, aes(x, value, colour = variable)) +
  geom_point() +
  scale_colour_manual(values = c("red", "blue"))
_

制限は、それぞれxlim()ylim()で手動で設定できます。アルファで何をしているのかはっきりしないので、それはあなたに任せます。

9
Chase