2013-07-02 2 views
11

zeichnen die empirische kumulative Dichte von drei Variablen x1, x2 und x3 einstellen, habe ich folgend in r:Wie kann ich die Achsen starten von Null Ursprung in r Plot

plot.ecdf(x1, col="blue", 
    main="Distribution XYZ", 
    xlab="x_i", ylab="Prob(x_i<=y)") 

lines(ecdf(x2), col="red") # adds a line 
lines(ecdf(x3), col="green") # adds line 
legend(600,0.6, # places a legend from (x,y)=(600,0.6) on 
     c("x1","x2","x3"), # puts text in the legend 
     lty=c(1,1,1), # gives the legend appropriate symbols (lines) 
     lwd=c(1,1,1),col=c("blue","red","green")) # gives the legend lines the correct color and width 

Das resultierende Grundstück hat jedoch zwei horizontale Linien (gestrichelte Linien) bei 0 und 1 neben der Box. Und der Ursprung der Box hat einen Abstand unter Null auf der vertikalen Achse und ein Leerzeichen links von Null auf der horizontalen Achse. Können Sie vorschlagen, wie Sie diesen Raum und die zusätzlichen Linien entfernen? Ich wollte, konnte aber die Handlung nicht veröffentlichen.

EDITED: Ein Beispieldaten können wie folgt erzeugt werden: Daten

Probe

n <- 1000; u <- runif(n) 
a <- -4.46; b <- 1.6; c <- -4.63 
d <- (a * u) + (b * ((1.5 * (u ** 2)) - 0.5)) + (c * ((2.5 * (u ** 3)) - (1.5 * u))) 
x1 <- -126/d; x2 <- -131/d; x3 <- -187/d 
+1

Können Sie ein minimales Arbeitsbeispiel angeben? Im Grunde ein minimaler Datensatz, mit dem wir Ihren Code ausführen können. –

+0

@TylerRinker Ich habe Beispieldaten aufgenommen. – Duna

+0

Ausgenommen die Antwort war in mancher Hinsicht falsch (es ist kein neues Feature) und unvollständig (weil es die Achsen nicht wie angefordert gesteuert hat, die die Hinzufügung einer xlim-Spezifikation benötigt). –

Antwort

13

Es klingt wie Sie für den Stil von verschiedenen Einstellungen für ‚xaxs‘ und ‚yaxs‘ vorgesehen sind gefragt und vielleicht 'Xlim':

Versuchen:

plot.ecdf(x1, col="blue", 
    main="Distribution XYZ", 
    xlab="x_i", ylab="Prob(x_i<=y)", 
    xaxs="i",yaxs="i", xlim=c(0,1000)) 

lines(ecdf(x2), col="red")  
lines(ecdf(x3), col="green") 
legend(600,0.6, 
     c("x1","x2","x3"), 
     lty=c(1,1,1), 
     lwd=c(1,1,1),col=c("blue","red","green")) 

enter image description here

+0

Ja, das ist genau das, was ich will. Und schließlich Anrufbox() – Duna

1

Sie könnten die Argumente verwenden xlim, ylim und col.01line:

x1 = runif(100) 
x2 = runif(100) 
x3 = runif(100) 
plot.ecdf(x1, col="blue", main="Distribution XYZ",xlab="x_i", ylab="Prob(x_i<=y)", ylim=c(0, 1), xlim=c(0,1), col.01line="white", verticals=FALSE) 
lines(ecdf(x2), col="red", col.01line="white") 
lines(ecdf(x3), col="green", col.01line="white") 
legend(600,0.6,c("x1","x2","x3"), lty=c(1,1,1), lwd=c(1,1,1),col=c("blue","red","green")) 

enter image description here

Alternativ

, könnte man einfach nutzen die generische plot:

f1 = ecdf(x1) 
f2 = ecdf(x2) 
f3 = ecdf(x3) 
pts = seq(0, 1, 0.01) 
plot(pts, f1(pts), col="blue", type="b", xlab="x_i", ylab="Prob(x_i<=y)", pch=16, main="Distribution XYZ") 
lines(pts, f2(pts), col="red", type="b", pch=16) 
lines(pts, f3(pts), col="green", type="b", pch=16) 
legend("topleft", c("x1","x2","x3"), fill=c("blue","red","green")) 

enter image description here

+0

Beachten Sie, dass ich hier meine Beispieldaten ('runif (100)') geplottet habe. Wenn Sie Ihre Daten verwenden, können Sie 'pts' in' seq (0, 1000, 0.1) 'oder etwas ähnliches ändern. – user1981275

+0

Ihr Code entfernt die unnötigen horizontalen Linien. Aber es gibt eine gebrochene horizontale Linie bei 0. Ich möchte das auch entfernen – Duna

7

verwenden yaxs = "i" Argument:

plot.ecdf(x1, col="blue", 
    main="Distribution XYZ", 
    xlab="x_i", ylab="Prob(x_i<=y)", yaxs = "i") 

Dies wird die Achse an den ylim Punkte ausrichten (die angeblich 0 sind und 1 für plot.ecdf).

Wenn Sie auch die gestrichelte Linie bei 0 und 1 entfernen möchten, rufen Sie einfach box():

box() 
Verwandte Themen