2012-09-17 10 views
12

Come aumentare l'area di stampa grigia di un grafico con un asse basato sui fattori e un asse numerico in modo che le etichette di testo nei grafici geom_text() siano visualizzate e non estese fuori dall'area della trama?Aumentare l'area di stampa in ggplot per far fronte a geom_text ai bordi della trama

ggplot showing geom_text() plot where labels extend outside the plot area

In particolare, vorrei estendere l'area grigia per fornire una zona margine all'interno della superficie di terreno che permette alle etichette di testo a comparire in pieno.

O c'è un modo migliore?

+10

Si potrebbe provare l'argomento 'expand' su' scale_x_discrete' e/o 'scale_y_continuous'. Prende un vettore numerico di lunghezza 2, il primo è un fattore di espansione e il secondo è un'espansione additiva. Prova diversi valori per vedere cosa funziona bene. –

+0

Mi auguro che il wordcloud di Fellow sia compatibile con ggplot2 poiché la sua versione aggiornata riguarda specificamente questo: http://blog.fellstat.com/?p=248 –

+0

@BrianDiggs Grazie per il suggerimento. 'expand' sembra fare il trucco, anche se penso che sia necessario qualche ritocco di stili come risultato ... Sto provando' theme_bw() 'per iniziare con ... – psychemedia

risposta

1

È possibile modificare l'opzione di layout di ciascun ggplot utilizzando ggplot_gtable, quindi visualizzare tutti i grafici utilizzando grid.arrange.

library(ggplot2) 
library(gridExtra) 
## create a dummy ggplot 
(g1 <- ggplot(mtcars, aes(wt, mpg)) + 
     geom_text(aes(label=rownames(mtcars)), size=6, angle=45) + 
     theme(plot.margin = unit(rep(1, 4), "cm"))) 

Ovviamente le etichette di testo non si estendono al di fuori del tracciato. Ma il seguente codice permette proprio questo:

gg_table <- ggplot_gtable(ggplot_build(g1)) 
gg_table$layout$clip[gg_table$layout$name=="panel"] <- "off" 
grid.draw(gg_table) 

Creare un gg_table per ogni pannello, quindi utilizzare grid.arrange per visualizzare tutti:

grid.arrange(gg_table, gg_table, gg_table, gg_table, ncol=2) 

enter image description here

So che questo è lavoro intensivo, ma si puoi scrivere una funzione per creare più ggplots e gg_tables per risparmiare tempo.

Problemi correlati