JD *_*ong 18 plot r ggplot2 lattice
我一直在尝试两者ggplot2并lattice绘制数据面板.我在ggplot2模型周围缠绕时有点麻烦.特别是,如何在每个面板上绘制带有两组数据的散点图:
在lattice我能做到这一点:
xyplot(Predicted_value + Actual_value ~ x_value | State_CD, data=dd)
Run Code Online (Sandbox Code Playgroud)
这将为每个列提供每个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)
Run Code Online (Sandbox Code Playgroud)
我不能理解的是如何将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")
Run Code Online (Sandbox Code Playgroud)
晶格输出如下所示: 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
Jon*_*ang 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)
Run Code Online (Sandbox Code Playgroud)
以下是我的样子: 替代文字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
Run Code Online (Sandbox Code Playgroud)
你看,它将Predicted_value和Actual_value"融合"到一个被调用的列中,value并添加另一个列,variable让你知道它最初来自哪个列.
更新:几年后,我几乎总是使用Jonathan的方法(通过tidyr包)和ggplot2.我在下面的回答很有用,但是当你有3个以上的变量时,它会变得很乏味.
我确信Hadley会有更好的答案,但是 - 语法不同,因为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)
Run Code Online (Sandbox Code Playgroud)
从ggplot()中拉出第一组点使其具有与第二组相同的语法.我发现这更容易处理,因为语法是相同的,它强调了ggplot2核心的"图形语法".