Frage Wie man langen Text in Ggplot2 Facettentitel einfügt


Ich habe eine kurze Frage über facet_wrap Etiketten in ggplot2. Unten ist ein einfacher Datenrahmen. Eine der Variablen (die Facettenvariable) ist sehr lang. Ich möchte einen einfachen Weg finden, um den gesamten Text in jedem Facetten-Label anzupassen. Ich bin mir sicher, dass es eine Art Wrap-Text-Funktion oder mehrere Zeilen-Option geben muss? Ich hoffe auf eine Methode, die nicht zu komplex ist oder nicht wirklich irgendwelche anderen Pakete erfordert.Ich bin noch relativ neu mit R und hoffe auf eine kurze und elegante Antwort innerhalb von ggplot2.

Q1<-c("Dissatisfied","Satisfied","Satisfied","Satisfied","Dissatisfied","Dissatisfied","Satisfied","Satisfied")

Q2<-c("Dissatisfied","Dissatisfied","Satisfied","Dissatisfied","Dissatisfied","Satisfied","Satisfied","Satisfied")



Year<-c("This is a very long variable name This is a very","This is another really long veriable name a really long","THis is a shorter name","Short name","This is also a long variable name again","Short name","Short name","Another kind of long variable name")

Example<-data.frame(Service,Year,Q1,Q2)

ExampleM<-melt(Example,id.vars=c("Service","Year"))

ggplot(ExampleM, aes(x=variable, fill=value)) + 
   geom_bar(position="dodge")+
   facet_grid(~Year)

5
2018-05-11 22:28


Ursprung


Antworten:


Ein häufig verwendetes Paket hat diese Funktionalität bereits: Verwendung stringr::str_wrap().

library(stringr)
library(plyr)
library(dplyr)

var_width = 60
my_plot_data <- mutate(my_plot_data, pretty_varname = str_wrap(long_varname, width = var_width))

Und dann fahre mit deiner Handlung fort.


9
2018-05-11 23:20



Sie können verwenden strwrap Zeilenumbrüche erstellen. Hier ist ein Beispiel:

library(reshape2)
library(ggplot2)

Example<-data.frame(Year,Q1,Q2, stringsAsFactors=FALSE)

ExampleM<-melt(Example,id.vars=c("Year"))

# Helper function for string wrapping. 
# Default 20 character target width.
swr = function(string, nwrap=20) {
  paste(strwrap(string, width=nwrap), collapse="\n")
}
swr = Vectorize(swr)

# Create line breaks in Year
ExampleM$Year = swr(ExampleM$Year)

ggplot(ExampleM, aes(x=variable, fill=value)) + 
  geom_bar(position="dodge") + 
  facet_grid(~Year)

enter image description here


4
2018-05-11 22:46