2016-05-11 8 views
5

Mam szybkie pytanie dotyczące etykiet aspektów_wrap w ggplot2. Poniżej znajduje się prosta ramka danych. Jedna ze zmiennych (zmienna aspektowa) jest bardzo długa. Chcę znaleźć prosty sposób na dopasowanie całego tekstu do każdej etykiety aspektu. Jestem pewien, że musi istnieć jakaś funkcja zawijania tekstu lub opcja wielu linii? Mam nadzieję na metodę, która nie jest zbyt skomplikowana lub tak naprawdę nie wymaga żadnych innych pakietów, jeśli to możliwe. Nadal jestem względnie nowa z R i mając nadzieję na krótką i elegancką odpowiedź w ggplot2.Jak dopasować długi tekst do aspektu Ggplot2 Tytuły

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) 
+0

Może pomocne: http://stackoverflow.com/questions/9052650/ggplot2-splitting-facet-strip-text-into-two -lines – lukeA

+0

'? Ggplot2 :: label_wrap_gen' – hrbrmstr

Odpowiedz

8

Powszechnie stosowany pakiet ma już tej funkcji: use 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)) 

A następnie kontynuuj swoją fabułę.

4

Możesz użyć strwrap, aby utworzyć podział wiersza. Oto przykład:

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

Powiązane problemy