2010-03-10 19 views
11

JD Long mi ha aiutato con questo: question about manual annotation.Annotare manualmente un ggplot con diverse etichette, in diverse facce

Ma è possibile fare qualcosa di simile su una trama sfaccettata, in modo tale che lo stile dell'etichetta corrisponda al linestyle (estetica) e in modo da poter annotare singolarmente differenti sfaccettature?

Alcuni dati:

funny <- structure(list(Institution = structure(c(1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 3L, 3L, 3L, 3L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 
3L, 3L, 3L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 1L, 
1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L), .Label = c("Q-branch", 
"Some-Ville", "Spectre"), class = "factor"), Type = structure(c(5L, 
6L, 1L, 3L, 5L, 6L, 2L, 4L, 5L, 6L, 2L, 4L, 5L, 6L, 2L, 4L, 5L, 
6L, 2L, 4L, 5L, 6L, 2L, 4L, 5L, 6L, 2L, 4L, 5L, 6L, 2L, 4L, 5L, 
6L, 2L, 4L, 5L, 6L, 2L, 4L, 5L, 6L, 2L, 4L, 5L, 6L, 2L, 4L), .Label = c("Korte videregående uddannelser", 
"Mammas beer", "Mellemlange videregående uddannelser", "Tastes good", 
"Unknown", "Your"), class = "factor"), År = c(2008L, 2008L, 
2008L, 2008L, 2008L, 2008L, 2008L, 2008L, 2008L, 2008L, 2008L, 
2008L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2006L, 2006L, 
2006L, 2006L, 2006L, 2006L, 2006L, 2006L, 2006L, 2006L, 2006L, 
2006L), Mndr = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 15L, 15L, 
15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 15L, 27L, 27L, 27L, 
27L, 27L, 27L, 27L, 27L, 27L, 27L, 27L, 27L), Data = c(159L, 
NA, NA, 23L, 204L, NA, NA, 12L, 256L, NA, NA, 24L, 166L, 6L, 
NA, 43L, 228L, NA, NA, 20L, 196L, 11L, NA, 37L, 99L, 14L, 9L, 
96L, 147L, 7L, 5L, 91L, 100L, 10L, 7L, 126L, 60L, 17L, 6L, 106L, 
78L, 18L, 13L, 140L, 48L, 23L, 5L, 136L)), .Names = c("Institution", 
"Type", "År", "Mndr", "Data"), class = "data.frame", row.names = c(NA, 
-48L)) 

e una trama sfaccettato:

ggplot(funny, aes(Mndr, y=Data, group=Type, col=Type)) + 
    geom_line() + 
    facet_grid(.~Institution) 

Grazie in anticipo per il vostro aiuto!

+0

@Shane: Non penso che questo sia un duplicato - Andreas non vuole utilizzare i dati nel grafico per calcolare il valore, ma piuttosto formattare le sue etichette in modo che corrispondano allo stile delle linee. – Aniko

+0

@Shane Grazie per l'attenzione. La risposta di Aniko è esattamente ciò che speravo. Quindi immagino che non sia necessario chiarire ulteriormente? Salvo per i posteri di causa. Grazie ancora. – Andreas

+0

Domanda correlata: http://stackoverflow.com/questions/2050610/creating-a-facet-wrap-plot-with-ggplot2-with-different-annotations-in-each-plot – Shane

risposta

15

L'idea è che per ogni annotazione manuale è necessario definire non solo l'etichetta, ma tutte le variabili che definiscono il pannello, il colore, ecc. Il codice seguente aggiunge due etichette in pannelli diversi.

pl <- ggplot(funny, aes(Mndr, y=Data, group=Type, col=Type))+geom_line() 
     +facet_grid(.~Institution) #your plot 
nd <- data.frame(Institution=c("Q-branch","Some-Ville"), #panel 
       Type=c("Unknown", "Tastes good"),  #color 
       Mndr=c(7,12),       #x-coordinate of label 
       Data= c(170,50),       #y-coordinate of label 
       Text=c("Label 1", "Label 2"))   #label text 
# add labels to plot: 
pl <- pl + geom_text(aes(label=Text), data=nd, hjust=0, legend=FALSE) 
pl 

L'opzione legend=FALSE farà in modo che il piccolo un di che denota il testo non vengono aggiunti alla leggenda. Non è necessario disporre di un frame dati per le etichette, si potrebbe avere un geom_text separato per ciascuno, ma trovo questo modo più semplice.

+0

Per quanto ne so dal manuale, la nuova sintassi ggplot è leggermente cambiata, legend = FALSE ora è show_guide = FALSE, penso. – PatrickT

+0

Sto provando a riprodurre i grafici dal codice nella domanda e il codice nella risposta, ma entrambi i grafici sono identici. Nessun testo è scritto sui grafici in quest'ultimo caso. Qualcosa è cambiato nella mia versione di ggplot2 (2.1.0)? – Robert

Problemi correlati