2016-05-05 22 views
1

Ich habe nach einer Wrapper-Funktion in ggplot2 gesucht, die mir helfen kann, den Legendentext in einem definierten rechteckigen Bereich zu platzieren. Bis jetzt habe ich keinen gefunden. Hier ist mein Fall:Wrap-Legendentext mit Ausdruck in ggplot2

library (ggplot2) 
p = ggplot (mtcars, aes (x = mpg, y= cyl,color = factor (cyl))) 
p + geom_point() 
z = unique (factor (mtcars$cyl)) 
p + geom_point() + scale_color_manual(name="legend title", breaks = z, 
            labels = c (expression(a + b + c + d + e + f + g + h + i), expression(x) , expression(y)), 
            values = c("red","blue","green")) 

Was ich will, ist die lange Ausdruck innerhalb einer Breite von fünf Zeichen gewickelt haben.

Gibt es eine Funktion, die automatisch den Text jeder Legendenschlüssel in eine definierte Textbreite umbrechen kann, und ich frage mich, ob das auch für Ausdrücke gelten kann.

Antwort

0

Folgendes, mit str_wrap von stringr, sollte für Sie arbeiten. Es wird wie gewünscht mit einem Wert von 5 umbrochen, sieht aber nicht so gut aus.

library(ggplot2) 
library(stringr) 
p = ggplot (mtcars, aes (x = mpg, y= cyl,color = factor (cyl))) 
p + geom_point() 
z = unique (factor (mtcars$cyl)) 
p + geom_point() + scale_color_manual(name="legend title", breaks = z, 
             labels = c(str_wrap(expression(a + b + c + d + e + f + g + h + i), 5), expression(x) , expression(y)), 
             values = c("red","blue","green")) 

enter image description here

+0

@stevebI haben dieses man versucht. Aber sobald ich den Ausdruck komplexer mache (wie das Einfügen von Index und Hochstellen), scheint es nicht zu funktionieren. Lassen Sie –

+0

@ satyanarayanrao können Sie den Code, den Sie für die Super-und Indices haben. Ich kann mir diese ansehen, aber die Konzentration auf Ihren speziellen Fall wäre ein guter Anfang. – steveb

+0

Hier ist es: str = einfügen ("P [\" "," a "," \ "]^m * Q *", "P [\" "," b "," \ "]^m * Q ", sep =" ") Im ggplot: labels = c (str_wrap (parse (text = str), 15), Ausdruck (x), Ausdruck (y)) Hier kommt der Ausdruck nicht wie erwartet heraus . Eigentlich habe ich eine lange Reihe solcher Ausdrücke, und ich möchte sie umhüllen. –