Come annotare piacevolmente un ggplot2 (manuale)
Domanda
Utilizzando ggplot2
normalmente io uso geom_text
e qualcosa come position=jitter
per annotare le mie trame.
Tuttavia - per una trama piacevole spesso trova la pena di annotare manualmente. come di seguito:
data2 <- structure(list(type = structure(c(5L, 1L, 2L, 4L, 3L, 5L, 1L,
2L, 4L, 3L, 5L, 1L, 2L, 4L, 3L, 5L, 1L, 2L, 4L, 3L), .Label = c("EDS",
"KIU", "LAK", "MVH", "NA*"), class = "factor"), value = c(0.9,
0.01, 0.01, 0.09, 0, 0.8, 0.05, 0, 0.15, 0, 0.41, 0.04, 0.03,
0.52, 0, 0.23, 0.11, 0.02, 0.64, 0.01), time = c(3L, 3L, 3L,
3L, 3L, 6L, 6L, 6L, 6L, 6L, 15L, 15L, 15L, 15L, 15L, 27L, 27L,
27L, 27L, 27L), year = c(2008L, 2008L, 2008L, 2008L, 2008L, 2007L,
2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L, 2007L,
2006L, 2006L, 2006L, 2006L, 2006L)), .Names = c("type", "value",
"time", "year"), row.names = c(1L, 3L, 4L, 5L, 6L, 7L, 9L, 10L,
11L, 12L, 13L, 15L, 16L, 17L, 18L, 19L, 21L, 22L, 23L, 24L), class = "data.frame")
ggplot(data2, aes(x=time, y=value, group=type, col=type))+
geom_line()+
geom_point()+
theme_bw()+
annotate("text", x=6, y=0.9, label="this is a wrong color")+
annotate("text", x=15, y=0.6, label="this is a second annotation with a wrong color")
Il problema è che non riesco a ottenere il colore del testo delle annotazioni per abbinare il colore della linea. Suppongo che potrei risolvere questo problema con una scala manuale, ma spero che ci sia un modo migliore?
Soluzione
Se si utilizza geom_text () al posto di Annotate () è possibile passare un colore gruppo alla trama:
ggplot(data2, aes(x=time, y=value, group=type, col=type))+
geom_line()+
geom_point()+
theme_bw() +
geom_text(aes(7, .9, label="correct color", color="NA*")) +
geom_text(aes(15, .6, label="another correct color!", color="MVH"))
Quindi, utilizzando annotare (), che appare così: http://www.cerebralmastication.com/wp-content/uploads/2010/ 03 / before.png
poi dopo aver usato geom_text (), che appare così: http://www.cerebralmastication.com/wp-content/uploads/2010/ 03 / after.png
Altri suggerimenti
Ho avuto un problema simile e risolto con la risposta JD Long. Ma come risultato di un ggplot2
l'aggiornamento alla versione 0.9.0 ho notato che tutti i geom_text()
calls resi un po 'sfocata nelle piazzole.
Grazie alla kohske ho scoperto che questo codice
ggplot(data2, aes(x=time, y=value, group=type, col=type))+
geom_line()+
geom_point()+
theme_bw() +
geom_text(aes(7, .9, label="correct color", color="NA*")) +
geom_text(aes(15, .6, label="another correct color!", color="MVH"))
traccia la nrow(data2)
times geom_text!
Il modo corretto per la fornitura di dati da geom_text sta costruendo un data.frame diversa tenendo coordinate, etichette e colori per le stringhe che si desidera tracciare:
data2.labels <- data.frame(
time = c(7, 15),
value = c(.9, .6),
label = c("correct color", "another correct color!"),
type = c("NA*", "MVH")
)
ggplot(data2, aes(x=time, y=value, group=type, col=type))+
geom_line()+
geom_point()+
theme_bw() +
geom_text(data = data2.labels, aes(x = time, y = value, label = label))