2009-08-21 62 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