2012-08-23 12 views
7

Ich benutze ggplot um einige Daten zu zeichnen und habe festgestellt, dass Legenden Texte sehr lang sind und nicht zum Fenster passen.Umbruch Legendentext passend zum Plotfenster

Gibt es in ggplot eine Option, um den Legendentext an das Fenster anzupassen.

+2

gute Frage: ein * reproduzierbares * Beispiel könnte Antworten beschleunigen ... –

+2

Schwer eine Antwort ohne Daten zu posten. Aber AFAIK gibt es keine Option in 'ggplot2', aber Sie können eine Funktion schreiben,' 'n'' nach einiger Länge einzufügen. –

Antwort

7

Nicht so weit, wie ich weiß, so habe ich auf einen Workaround mit strwidth(), die die Breite des Textes in der Basisgrafik berechnet verwendet.

title <- "This is a really excessively wide title for a plot, especially since it probably won't fit" 

Verwenden par("din") to get the width of the device, and strwidth (`) die Textgröße zu berechnen:

par("din")[1] 
[1] 8.819444 
strwidth(title, units="inches") 
[1] 11.47222 

es in Funktion und Plot Verwendung:

wrapTitle <- function(x, width=par("din")[1]){ 
    xx <- strwrap(x, width=0.8 * nchar(x) * width/strwidth(x, units="inches")) 
    paste(xx, collapse="\n") 
} 

wrapTitle(title) 
[1] "This is a really excessively wide title for a plot, especially since it\nprobably won't fit, meaning we somehow have to wrap it" 

das Grundstück:

ggplot(mtcars, aes(wt, mpg)) + geom_point() + opts(title=wrapTitle(title)) 


Wenn Sie den Plot-Datei speichern möchten, dann können Sie par("din") den tatsächlichen gespeicherten Grundstück Dimensionen ersetzen.

+0

Ich mag Ihren Ansatz, aber wie ich es verstehe, möchte das OP den Legendentext nicht den Titel oder Legendentitel umhüllen. Gibt es eine Möglichkeit, die Dimensionen des Grobs zu kennen, wo der Legendentext ist? –

+0

@Iselzer Ahah, ich habe nicht genug aufgepasst ... – Andrie