plotCI:如何叠加两个变量的图

时间:2014-04-26 14:06:23

标签: r plot

我试图用置信区间来描绘掠食者和猎物的数量。我可以分别绘制这两个图,如何在同一图上绘图?

#take mean, number, and create se of prey(d)
d.means=tapply(mydata$prey,mydata$week, mean)
d.n=tapply(mydata$prey,mydata$week, length)
d.se=tapply(mydata$prey,mydata$week, sd)/sqrt(d.n)
#plot with se using plotrix
plotCI(as.numeric(row.names(d.means)),d.means,d.se,ylim=c(0,400),pch=19,gap=0,xlab="Week",ylab="d, w population")




 #take mean, number, and create se of predator(w)
w.means=tapply(mydata$pred,mydata$week, mean)
w.n=tapply(mydata$pred,mydata$week, length)
w.se=tapply(mydata$pred,mydata$week, sd)/sqrt(w.n)
#plot with se using plotrix
plotCI(as.numeric(row.names(w.means)),w.means,w.se,ylim=c(0,400),pch=19,gap=0,xlab="Week",ylab="d, w population")

2 个答案:

答案 0 :(得分:1)

在第一个绘图之后,在绘制下一个绘图之前使用下面的代码:

par(new=T)

确保将xlim和ylim设置为适应两个图。您需要使用选项axes = F和ann = F.

这些图形功能在电子书“R Fundamentals& Graphics”中有详细讨论。您可能希望将其用作桌面参考。

答案 1 :(得分:0)

#take mean, number, and create se of prey(d)
d.means=tapply(mydata$prey,mydata$week, mean)
d.n=tapply(mydata$prey,mydata$week, length)
d.se=tapply(mydata$prey,mydata$week, sd)/sqrt(d.n)


 #take mean, number, and create se of predator(w)
w.means=tapply(mydata$pred,mydata$week, mean)
w.n=tapply(mydata$pred,mydata$week, length)
w.se=tapply(mydata$pred,mydata$week, sd)/sqrt(w.n)

在这里,您已经创建了所需的所有变量,但是使用ggplot绘制它们,您需要它们位于高数据集中,并带有一个变量,指示它们是捕食者还是猎物。我还添加了一个时间变量,我认为你的是一周。

x=data.frame(means=c(w.means,d.means),
             n=c(w.n,d.n),
             se=c(w.se,d.se),
             role=c(rep("pred",length(w.n)),rep("prey",length(d.n))),
             time=c(1:length(w.n),1:length(d.n))
             )

我不确切知道你的数据是什么样的,所以这里是一个假的,我只是为了说明格式。

      means  n         se role time
1 0.9874234 10 0.16200575 pred    1
2 1.4120207 12 0.08895026 pred    2
3 2.7352516  8 0.07991036 pred    3
4 1.1301248 11 0.05481813 prey    1
5 2.4810040 13 0.28682585 prey    2
6 3.1546947  9 0.22126054 prey    3

一旦数据采用这种漂亮的格式,使用ggplot非常简单。

ggplot(x, aes(x=time, y=means, colour=role)) + 
  geom_errorbar(aes(ymin=means-se, ymax=means+se), width=.1) +
  geom_line() 

这就是: