2009-08-21 65 views
18

在GGPLOT2散點圖上繪製兩個數據向量我一直在試驗ggplot2lattice來繪製數據面板。我在圍繞ggplot2模型纏繞一些小麻煩。特別是,如何繪製兩組數據的每個面板上的散點圖:使用R

lattice我可以這樣做:

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

而且會給我一個面板每個State_CD每列

我可以做一個列有ggplot2

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

我不能神交的是如何Actual_value添加到ggplot以上。

編輯哈德利指出,這可以通過一個可重複的例子更容易。這是似乎工作的代碼。用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") 

點陣輸出看起來是這樣的: alt text http://www.cerebralmastication.com/wp-content/uploads/2009/08/lattice.png

和ggplot看起來是這樣的: alt text http://www.cerebralmastication.com/wp-content/uploads/2009/08/ggplot.png

+0

如果你提供了一個可重複的例子 – hadley 2009-08-21 20:31:55

+0

是的,這將是一個很好的觀點,提供建議會容易得多。我沒有創造一個完整的例子是懶惰的。我會努力工作。 – 2009-08-21 20:33:14

回答

19

只需跟進Ian的建議:對於ggplot2,您確實需要將一列中的所有Y軸素材與另一列作爲指示您如何修飾它的因素。用melt這樣做很容易。即:

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

下面是它看起來像我: alt text http://www.cs.princeton.edu/~jcone/example.png

要得到一個什麼樣melt其實就是做一個想法,這裏的頭:

> 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 

你看,它將Predicted_value和Actual_value「融化」爲一列,名爲value,並添加另一列variable,讓您知道它最初來自哪個列。

1

以及張貼我碰到this R Help thread跑可能已經幫助過我的問題後。它看起來像我可以這樣做:

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

是做事情的好辦法嗎?這對我來說很奇怪,因爲添加第二項與第一項語法完全不同。

+0

請注意,您只需更改您在ggplot()部分中設置的默認值即可。在你的情況下,你只需要設置新的y值和顏色。 (aes(y = x_value,y = Predicted_value))+ geom_point(shape = 2)+ facet_wrap(〜State_CD)+ opts(aspect.ratio = 1)+ geom_line(aes(yActual_value,color =「green 「) – Thierry 2009-08-24 08:24:39

2

您可能只是想稍微改變數據的形式,以便您有一個y軸變量,並帶有一個附加因子變量,指示它是預測變量還是實際變量。

這就像你想要做的事情?

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) 
+0

ahhh ..我認爲這就是ggplot文檔中的例子,這肯定有助於我的思考 – 2009-08-21 21:36:32

6

更新:現在上幾年,我幾乎總是使用GGPLOT2喬納森的方法(通過tidyr package)。我的答案在下方有效,但當你有3個以上的變量時會變得很乏味。


我敢肯定,哈德利將有一個更好的答案,但 - 語法是不同的,因爲ggplot(dd,aes())語法(我認爲),主要用於繪製只是一個變量。兩年,我會用:

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) 

拉動第一組點了ggplot的()給它相同的語法第二。我覺得這更容易處理,因爲語法是相同的,它強調了ggplot2核心的「圖形語法」。

+0

@MichaelChirico確實!'aspect.ratio'現在在'theme()'函數中。指出這一點。 – 2016-09-07 17:05:32