2017-02-05 11 views
1

In meinem R nachfolgenden Code, ich habe zwei Situationenjeder resultierenden in einem anderen Grundstück je nach S wobei größer oder kleiner als1. Ich habe mich gefragt, wie ich die aktuelle Legende herausnehmen (move up) und es über die Handlung an der gleichen Stelle für beide der resultierenden Plots setzen kann?Platzierung Legende außerhalb eines sich dynamisch ändernden Plot R

Hinweis: Aufgrund Y-Achse auf log-Skala ist habe ich verwendet 10^par('usr')[4] aber ich brauche eine Reihe-10^par('usr')[4] (dh(10^par('usr'))[4] + a number) so hinzuzufügen, dass "Diese Nummer" bringt die Legende an die exakt gleiche Stelle über eines der resultierenden Plots?

Hier ist der R-Code:

S <- 0.25 ### !!! Change this to "24" and see how another plot will appear !!! ### 
Ur <- c(0.25, 24, 16) 

if(S>=1){ 

plot(1, 1, type = "n", xlim = c(0,1.5), ylim = c(1/3, 100), log="y", bty="n", ann=F, axes=F, xaxs="i") 

axis(side=1, at = seq(0,1.5,.25),labels = c("0",".25",".5",".75","1","1.25","1.5")) 
axis(side=2, at = c(1/3, 1, 3, 10, 30, 100),labels = c("1/3", "1", "3", "10", "30", "100"),las=1) 

}else{ 

plot(1, 1, type = "n", xlim = c(0,1.5), ylim = c(.01, 3), log="y", bty="n", ann=F ,axes=F, xaxs="i") 

axis(side=1, at = seq(0,1.5,.25),labels = c("0",".25",".5",".75","1","1.25","1.5")) 
axis(side=2, at = c(.01, 1/30, 1/10, 1/3, 1, 3),labels = c("1/100", "1/30", "1/10", "1/3", "1", "3"),las=1) 
} 


legend(0, (10^par("usr"))[4], bquote(paste("Selected Prior:    ",bold('PN'[10])," = ", .(round(S,3)))), ## Legend 
    pch = 21,cex=2,pt.bg="green", col="red", pt.cex=2.8, bty="n") 
+0

ich nicht G finden konnten? – aelwan

+0

Sie können die Koordinaten des aktuellen Diagramms mit 'par() $ fig' (die X-, Y-Koordinaten der 'Box') finden und daraus Koordinaten für Ihre Legende berechnen –

+0

@aelwan, ich habe den Code bearbeitet, läuft gut – rnorouzian

Antwort

1

Sie können das inset Argument in legend .Um so tun, müssen Sie Legende Position als ein Wort verwenden. In Ihrem Fall "topleft". Auf diese Weise müssen Sie keinen bestimmten Ort basierend auf Ihrem "y" angeben.

Mit dem Inset-Argument können Sie die Legende versetzen. Im vorliegenden Fall ist y um -0,03 versetzt.

Ich verwende auch par(xpd=TRUE), um den zulässigen Zeichenbereich zu erweitern. Schließlich habe ich auch die Schriftgröße geändert, um die folgenden Diagramme zu erstellen.

par(xpd=TRUE) 
legend("topleft", legend=bquote(paste("Selected Prior:    ",bold('PN'[10])," = ", .(round(S,3)))), ## Legend 
    pch = 21,cex=1,pt.bg="green", col="red", pt.cex=2, bty="n", inset=c(0,-0.03)) 

enter image description here enter image description here

+0

Vielen Dank! Nur ein einfaches Follow-up, gibt es irgendein Argument innerhalb der 'legend()', das den Abstand zwischen dem Symbol und dem Text, der nach dem Symbol erscheint, kontrollieren kann? (in meinem Fall, die ** Abstand zwischen dann der grüne Punkt und das Wort "Ausgewählte vorherige" **?) – rnorouzian

+0

@parvinkarimi Ja. es ist 'x.intersp' versuche' x.intersp = 0.5' um eine kurze Distanz zu bekommen oder 'x.intersp = 2' um die Distanz zu erhöhen –

Verwandte Themen