I am using ggplot to chart some data and I noticed that legends text are very long and not fitting the window.
+ opts(legend.position = 'bottom', legend.direction = 'horizontal', size=0.1) +
guides(colour = guide_legend(nrow = 3), size=1)
Is there an option in ggplot to wrap the legend text to fit the window.
Not as far as I know, so I have resorted to a workaround using strwidth()
, which calculates the width of text in base graphics.
title <- "This is a really excessively wide title for a plot, especially since it probably won't fit"
Use par("din")
to get the width of the device, and strwidth()
to calculate the text size:
par("din")[1]
[1] 8.819444
strwidth(title, units="inches")
[1] 11.47222
Use it in a function and plot:
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"
The plot:
ggplot(mtcars, aes(wt, mpg)) + geom_point() + opts(title=wrapTitle(title))
If you want to save the plot to file, then you can replace par("din")
with the actual saved plot dimensions.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With