最初我從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