18

私は と の両方ggplot2を実験してlattice、データのパネルをグラフ化しました。ggplot2モデルについて頭を悩ませています。特に、各パネルに 2 セットのデータを含む散布図をプロットするにはどうすればよいですか。

私はlatticeこれを行うことができます:

xyplot(Predicted_value + Actual_value ~ x_value | State_CD, data=dd)

そしてそれは私に各列を持つ各State_CDのパネルを与えるでしょう

私は1つの列を行うことができますggplot2:

pg <- ggplot(dd, aes(x_value, Predicted_value)) + geom_point(shape = 2) 
      + facet_wrap(~ State_CD) + opts(aspect.ratio = 1)
print(pg)

私が理解できないのは、上記の ggplot に Actual_value を追加する方法です。

編集Hadley は、再現可能な例を使用すると、これは本当に簡単になると指摘しました。動作するように見えるコードを次に示します。ggplotでこれを行うためのより良い、またはより簡潔な方法はありますか? 別のポイント セットを ggplot に追加するための構文が、最初のデータ セットを追加するのと非常に異なるのはなぜですか?

library(lattice)
library(ggplot2)

#make some example data
dd<-data.frame(matrix(rnorm(108),36,3),c(rep("A",24),rep("B",24),rep("C",24)))
colnames(dd) <- c("Predicted_value", "Actual_value", "x_value", "State_CD")

#plot with lattice
xyplot(Predicted_value + Actual_value ~ x_value | State_CD, data=dd)

#plot with ggplot
pg <- ggplot(dd, aes(x_value, Predicted_value)) + geom_point(shape = 2) + facet_wrap(~ State_CD) + opts(aspect.ratio = 1)
print(pg)

pg + geom_point(data=dd,aes(x_value, Actual_value,group=State_CD), colour="green")

格子出力は次のようになります: (出典: cerebralmastication.com )代替テキスト

ggplot は次のようになります: (ソース: cerebralmastication.com )代替テキスト

4

4 に答える 4

19

Just following up on what Ian suggested: for ggplot2 you really want all the y-axis stuff in one column with another column as a factor indicating how you want to decorate it. It is easy to do this with melt. To wit:

qplot(x_value, value, 
      data = melt(dd, measure.vars=c("Predicted_value", "Actual_value")), 
      colour=variable) + facet_wrap(~State_CD)

Here's what it looks like for me: alt text
(source: princeton.edu)

To get an idea of what melt is actually doing, here's the head:

> head(melt(dd, measure.vars=c("Predicted_value", "Actual_value")))
     x_value State_CD        variable      value
1  1.2898779        A Predicted_value  1.0913712
2  0.1077710        A Predicted_value -2.2337188
3 -0.9430190        A Predicted_value  1.1409515
4  0.3698614        A Predicted_value -1.8260033
5 -0.3949606        A Predicted_value -0.3102753
6 -0.1275037        A Predicted_value -1.2945864

You see, it "melts" Predicted_value and Actual_value into one column called value and adds another column called variable letting you know what column it originally came from.

于 2009-08-21T21:36:39.340 に答える
6

Update: several years on now, I almost always use Jonathan's method (via the tidyr package) with ggplot2. My answer below works in a pinch, but gets tedious fast when you have 3+ variables.


I'm sure Hadley will have a better answer, but - the syntax is different because the ggplot(dd,aes()) syntax is (I think) primarily intended for plotting just one variable. For two, I would use:

ggplot() + 
geom_point(data=dd, aes(x_value, Actual_value, group=State_CD), colour="green") + 
geom_point(data=dd, aes(x_value, Predicted_value, group=State_CD), shape = 2) + 
facet_wrap(~ State_CD) + 
theme(aspect.ratio = 1)

Pulling the first set of points out of the ggplot() gives it the same syntax as the second. I find this easier to deal with because the syntax is the same and it emphasizes the "Grammar of Graphics" that is at the core of ggplot2.

于 2009-08-21T21:36:23.770 に答える
2

データの形式を少し変更して、y 軸の変数を 1 つにし、それが予測変数か実際の変数かを示す因子変数を追加することができます。

これはあなたがやろうとしていることのようなものですか?

dd<-data.frame(type=rep(c("Predicted_value","Actual_value"),20),y_value=rnorm(40),
                x_value=rnorm(40),State_CD=rnorm(40)>0)
qplot(x_value,y_value,data=dd,colour=type,facets=.~State_CD)
于 2009-08-21T20:35:27.793 に答える
1

質問を投稿した後、私を助けてくれたかもしれないこのRヘルプスレッドに出くわしました。私はこれを行うことができるように見えます:

 pg + geom_line(data=dd,aes(x_value, Actual_value,group=State_CD), colour="green") 

それは物事を行う良い方法ですか?2 番目の項目を追加すると、最初の項目とはまったく異なる構文になるため、私には奇妙です。

于 2009-08-21T20:11:49.200 に答える