2012-04-11 11 views
35

Ich habe eine Legende in einem Diagramm mit einer Linie (von einer Abline-Anweisung) durch sie gehen. Wie kann ich erreichen, dass die Abline in der Nähe der Legende unsichtbar wird? Dies sollte erreichbar sein, indem der Legendenhintergrund weiß ohne Grenzen gesetzt wird, aber wie kann ich dies erreichen? die Graphen Es sei angenommen, sollte wie folgt aussehen:Plot Legenden ohne Rand und mit weißem Hintergrund

windows.options(width=30, height=12) 
plot(1:10) 
abline(v=seq(1,10,1), col='grey', lty='dotted') 
legend(4.8, 3, "This legend text should not be disturbed by the dotted grey lines") 

Und es etwas komplizierter zu bekommen: Wenn die Legende mit den Punkten des Dot-Plot stört: Wie kann ich erreichen, dass die ablines in der Nähe unsichtbar werden der Legende (wie oben), aber dass die Punkte noch sichtbar sind?

windows.options(width=30, height=12) 
plot(1:10) 
abline(v=seq(1,10,1), col='grey', lty='dotted') 
legend(1, 5, "This legend text should not be disturbed by the dotted grey lines, but the plotted dots should still be visible") 

Und schließlich: Gibt es eine Möglichkeit, Zeilenumbrüche in Legendenanweisungen einzuführen?

+0

Warum wird diese Frage nicht als beantwortet markiert? –

Antwort

21

Wie in ?legend dokumentiert tun Sie dies wie folgt:

plot(1:10,type = "n") 
abline(v=seq(1,10,1), col='grey', lty='dotted') 
legend(1, 5, "This legend text should not be disturbed by the dotted grey lines,\nbut the plotted dots should still be visible",box.lwd = 0,box.col = "white",bg = "white") 
points(1:10,1:10) 

enter image description here

Zeilenumbrüche werden mit der neuen Linie Charakter \n erreicht. Die Punkte sichtbar zu machen, geschieht einfach durch Ändern der Reihenfolge der Plotting. Denken Sie daran, dass das Zeichnen in R wie das Zeichnen auf einem Stück Papier ist: Jedes Ding, das Sie plotten, wird auf das platziert, was gerade dort ist.

Beachten Sie, dass der Legendentext abgeschnitten wird, weil ich die Plotdimensionen verkleinert habe (windows.options existiert nicht auf allen R-Plattformen).

+1

box.lwd = 0 wird gut funktionieren. bty = 'n' ist wahrscheinlich besser, weil es bedeutet, dass der Legendentyp überhaupt KEINE ist. Beide gute Antworten! –

+2

Dies ist eine bessere Antwort als bty = 'n', weil es das weiße bg bewahrt, was die ursprüngliche Frage ist. Für den zweiten Punkt, wo die Legende die Linie, aber nicht die Punkte abdeckt, ist die einzige Lösung, die ich sehen kann, das Hinzufügen eines point() Befehls nach der Legendenzeile. – slammaster

76

Verwenden Sie die Option bty = "n" in legend, um die Box um die Legende zu entfernen. Zum Beispiel:

legend(1, 5, 
     "This legend text should not be disturbed by the dotted grey lines,\nbut the plotted dots should still be visible", 
     bty = "n") 
+1

Das funktioniert hervorragend! Vielen Dank! – Contango

+2

Das ist die richtige Antwort. Es wäre schön, wenn die R-Dokumentation tatsächlich wörtlich erklärt, dass das bty = 'n' dazu führen wird, dass keine Legendenbox gezeichnet wird. Stattdessen sagt es nur, dass "n" eine der Optionen ist, ohne den Effekt dieser Option zu erklären. Ich frage mich, ob die R-Betreuer jemandem wie mir erlauben würden, die Standarddokumentation, wie diese, zu verbessern. –

+1

was bedeutet bty? – olala

Verwandte Themen