2015-02-27 21 views
14

(aggiornato) Ho ggplot come questo, ma poi il Data asse x in scala:Aggiungere testo a ggplot

g1 <- ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar() 

Sopra due bar (consente sayVS2 e IF, ma nel mio grafico si tratta di una data) Voglio mettere un'etichetta di testo sopra le barre a heigt 13.000.

ho provato un sacco di cose, ma questo è quello che si avvicinava di più: Questo è quello che ho cercato nel mio grafico con la Data di assi G1 + geom_text (AES (as.Date ("2014/10/05") , 13000), label = "barca")

ma questo aggiunge uno solo per il grafico e non appena cerco di estendere, ad esempio con

g1 + geom_text(aes(c(as.Date("2014-10-05"),as.Date("2014-10-20")) , 13000), label=c("boat", "train")) 

allora ottengo l'errore:

Error: Aesthetics must either be length one, or the same length as the dataProblems:c(as.Date("2014-10-05"), as.Date("2014-10-20"))

Ho anche cercato di leggere il testo e le etichette da un dataframe (oefen), dove ho usato gli stessi nomi come la trama originale

g1 + geom_text(data=oefen, aes(x=newdat, y=Number, label=oefen$labs, fill=1)) 

ottengo l'errore

Error: Continuous value supplied to discrete scale

ho provato molte altre soluzioni , ma non riesce a trovare la risposta. Cosa mi manca?

+1

Difficile da seguire senza un esempio riproducibile. Tuttavia, che dire di 'df <- data.frame (x = as.Date (c (" 2014-10-04 "," 2014-10-08 "," 2014-11-06 ")), y = campione (1: 3, 3), etichetta = campione (lettere, 3)); ggplot (df, aes (x, y, label = label)) + geom_bar (stat = "identity") + geom_text (y = 4) + ylim (c (0, 4)) '? – lukeA

+0

Ciao luke, grazie per la tua risposta. La tua soluzione si avvicina, ma quello che voglio sono solo quelle lettere (quindi niente barre), tracciate sul mio originale bargraph g1 impilato. Ho un barplot come questo: ggplot (diamonds, aes (clarity, fill = cut)) + geom_bar(), ma l'xaxis è una variabile Date. Sopra solo due barre voglio tracciare una lettera. È più chiaro? – Rosanne

+0

@Rosanne si prega di inviare un semplice esempio di codice riproducibile utilizzando il dataset di diamanti. – smci

risposta

38

Considerare l'utilizzo di annotate() per posizionare qualsiasi testo dove si desidera in una determinata posizione del grafico. Le variabili fattoriali, come nel fattore di chiarezza sull'asse x, hanno un numero per ogni livello, quindi puoi usare quel numero per localizzare il testo. Suppongo variabili di data hanno lo stesso utilizzo .:

ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar() + 
    annotate("text", x=8, y=13000, label= "boat") + 
    annotate("text", x = 4, y=13000, label = "ship") 

enter image description here

EDIT dopo COMMENTO

Per l'efficienza, è possibile combinare le annotazioni, come questa:

ggplot(diamonds, aes(clarity, fill=cut)) + geom_bar() + 
    annotate("text", x = c(2,4,6,8), y=13000, label = c("two", "ship", "six", "boat")) 
+0

Grazie mille, questo era esattamente quello che stavo cercando. Ho provato a usare annotate prima, ma non ha funzionato, forse era tutto troppo incasinato. Mi stavo chiedendo come aggiungere 6 etichette se esiste un modo per combinare tutto in un unico script anziché utilizzare l'annotazione sei volte? Ad ogni modo, Ill lo metto giù 6 volte ora che finalmente funziona. Grazie mille!! – Rosanne

+0

Ho aggiunto una tecnica suggerita per più annotazioni in una riga. Se questo risponde alla tua domanda, ti preghiamo di accettarlo. Grazie – lawyeR

+0

Hai risposto alla tua domanda? – lawyeR

Problemi correlati