2016-03-21 8 views
5

Vorrei aggiungere testo/titolo per i miei fattori usando ggplot2.Aggiungi "titolo" ai miei fattori usando facet_grid

Per exemple per i dati provenienti da {} reshape2 libreria:

library(reshape2) 
library(ggplot2) 
ggplot(tips, aes(x=total_bill, y=tip/total_bill)) + geom_point(shape=1) + 
    facet_grid(sex ~ .) 

Fattori etichette sono: femminile e maschile.

Come posso aggiungere sopra di loro il titolo "sesso"?

enter image description here

+0

Beh, si può passare 'etichettatrice = label_both' a' facet_grid'. Non è proprio quello che vuoi (certamente non del tutto ... audace), ma è un inizio. – alistaire

+0

Crea un'altra variabile con il sesso come tutto il suo valore e aggiungila alla faccetta prima della variabile del sesso stesso. – TheRimalaya

+0

l'opzione più comoda sarebbe 'gridExtra :: grid.arrange (last_plot(), right =" SEX ")'. Un'alternativa più completa sarebbe usare 'ggplotGrob',' gtable_add_cols', 'gtable_add_grob' e' textGrob' – baptiste

risposta

4

Adattamento this answer.

Versione leggermente migliore. Elabora la sua larghezza.

library(reshape2) 
library(ggplot2) 
library(grid) 
library(gtable) 

p = ggplot(tips, aes(x=total_bill, y=tip/total_bill)) + geom_point(shape=1) + 
    facet_grid(sex ~ .) 

# text, size, colour for added text 
text = "SEX" 
size = 30 
col = "red" 
face = "bold" 

# Convert the plot to a grob 
gt <- ggplotGrob(p) 

# Get the positions of the right strips in the layout: t = top, l = left, ... 
strip <-c(subset(gt$layout, grepl("strip-r", gt$layout$name), select = t:r)) 

# Text grob 
text.grob = textGrob(text, rot = -90, 
    gp = gpar(fontsize = size, col = col, fontface = face)) 

# New column to the right of current strip 
# Adjusts its width to text size 
width = unit(2, "grobwidth", text.grob) + unit(1, "lines") 
gt <- gtable_add_cols(gt, width, max(strip$r)) 

# Add text grob to new column 
gt <- gtable_add_grob(gt, text.grob, 
     t = min(strip$t), l = max(strip$r) + 1, b = max(strip$b)) 

# Draw it 
grid.newpage() 
grid.draw(gt) 

originale

library(reshape2) 
library(ggplot2) 
library(grid) 
library(gtable) 

p = ggplot(tips, aes(x=total_bill, y=tip/total_bill)) + geom_point(shape=1) + 
    facet_grid(sex ~ .) 

# Convert the plot to a grob 
gt <- ggplotGrob(p) 

# Get the positions of the right strips in the layout: t = top, l = left, ... 
strip <-c(subset(gt$layout, grepl("strip-r", gt$layout$name), select = t:r)) 

# New column to the right of current strip 
# Adjust the width to suit 
gt <- gtable_add_cols(gt, unit(3, "lines"), max(strip$r)) 

# Add text grob to new column; adjust cex (i.e., size) to suit 
gt <- gtable_add_grob(gt, 
    textGrob("SEX", rot = -90, 
     gp = gpar(cex = 2, fontface = "bold", col = "RED")), 
     t = min(strip$t), l = max(strip$r) + 1, b = max(strip$b)) 

# Draw it 
grid.newpage() 
grid.draw(gt) 

enter image description here

+1

SI !! grazie @SandyMuspratt, era quello che stavo cercando! – maycca

Problemi correlati