最初我从2个向量开始(我的数据的子集)。我在两者上运行ecdf,将它们绘制在同一个图中以便于比较。所有这些都很好,但我需要知道的是如何使这个函数对于任何一对向量都能够普遍使用,所以我只需输入向量就可以工作。就像我要第二次调用较大的矢量一样,我希望绘图的坐标轴自动缩放较大的矢量,无论调用顺序如何,都不会丢失数据。在R中绘制两个ecdf进行比较时,如何将坐标轴缩放到较大的矢量?
为了以防万一,我已经包含了一套使用虹膜数据的设置。
data=iris
virg<-subset(iris, iris$Species=="virginica"); virg
virg_pl<-virg$Petal.Length; virg_pl
versi<-subset(iris, iris$Species=="versicolor"); versi
versi_pl<-versi$Petal.Length; versi_pl
这里是我有:
twoecdfsoner<-function(x,y,z){
ecdf1<-ecdf(x)
ecdf2<-ecdf(y)
plot(ecdf1,xlab=head(z,n=1),
ylab="cumulative relative frequency",
lty=1,pch=".",
main="",
do.point=FALSE,
verticals=TRUE,xlim=c(min (y),max (x)))
plot(ecdf2,verticals=TRUE,
do.points=FALSE,
lty=3,pch=".",
add=TRUE, xlim=c(min (y),max (x)))
legend("right","center",
legend=c(deparse(substitute(x)),
deparse(substitute(y))),
lty=c(1,3),cex=0.8)
}
twoecdfsoner(virg_pl,versi_pl,"inches")
好像我可以写一个条件语句,但我得到这个错误:
Warning messages:
1: In x > y :
longer object length is not a multiple of shorter object length
2: In x > y :
longer object length is not a multiple of shorter object length
3: In x > y :
longer object length is not a multiple of shorter object length
到目前为止,我已经尝试
xlim=c(min (y),max (x)))
xlim=range(c(x),c(y)
xlim=pmax(x,y)
and writing condit离线陈述
我还想要实线为该较大的矢量编码。如果有人有任何建议,将不胜感激。
@ 42-读了一下后,我想我可以做一个条件语句,这似乎也起作用。对这种方式运行代码有任何批评吗?
twoecdfsoner<-function(x,y,z){
ecdf_1 <- plot(ecdf(x),
verticals=TRUE,
pch=".",
main="",
do.points=FALSE,
lty=ifelse(max(x)>max(y), c(1), c(3)),
xlab=head(z,n=1),
ylab="Cumulative relative frequency",
xlim=range(x,y))
ecdf_2 <- lines(ecdf(y),
verticals=TRUE,
do.points=FALSE,
lty=ifelse(max(y)>max(x), c(1), c(3)),
pch=".")
legend_text<-
if (max(x)>max(y)){
legend=c(deparse(substitute(x)), deparse(substitute(y)))
} else {max(y)>max(x)
legend=c(deparse(substitute(y)), deparse(substitute(x)))
}
legend("right",
legend=legend_text,
lty=c(1,3))
}
twoecdfsoner(virg_pl,versi_pl,"inches")
当我运行代码时,我得不到任何错误。 – G5W
@ G5W:尝试颠倒前两个参数。 –
@ 42我明白了。没有错误,但图表缩小。得到它了。 – G5W