2015-09-09 23 views
5

Ho esaminato domande simili precedenti e (penso) ho fatto tutto ciò che è stato raccomandato in esse. Non sto ancora ottenendo l'output che voglio.Aggiunta di legenda manuale in ggplot

Ho un sacco di distribuzioni, che sto visualizzando in grafici sfaccettati. Poi disegno linee verticali attraverso di loro, che rappresentano diversi interventi.

Sto tentando di visualizzare una legenda che contiene sia il colore di riempimento delle distribuzioni che il colore della linea di quelle linee aggiuntive. Per quanto posso dire, sto facendo tutto bene (impostando il comando colore entro aes(), usando scale_colour_manual() per definire la legenda, ecc.). Sto ancora ricevendo solo la legenda per i colori di riempimento.

Ecco il mio codice:

ggplot(modCosts, aes(x=cost)) + geom_density(aes(fill=group)) + theme_bw() + 
    facet_wrap(~ country, scales="free") + scale_x_continuous(label = dollar) + 
    scale_fill_brewer(palette = "RdGy", name = "Income group", labels = c("HIC" = "High income", "UMIC" = "Upper-middle income", "LIC" = "Low income")) + 
    labs(y = "Density", x = "Cost", title = "Medical costs of surgery\nActual vs. modeled") + 
    geom_vline(data = surgCosts, aes(xintercept = CS.tert.lo, color = "red4")) + 
    geom_vline(data = surgCosts, aes(xintercept = CS.tert.hi, color = "red4")) + 
    geom_vline(data = surgCosts, aes(xintercept = CS.prim.lo, color = "red4"), lty = "dashed") + 
    geom_vline(data = surgCosts, aes(xintercept = CS.prim.hi, color = "red4"), lty = "dashed") + 
    geom_vline(data = surgCosts, aes(xintercept = Lap.tert.lo, color = "deepskyblue")) + 
    geom_vline(data = surgCosts, aes(xintercept = Lap.tert.hi, color = "deepskyblue")) + 
    geom_vline(data = surgCosts, aes(xintercept = Lap.prim.lo, color = "deepskyblue"), lty = "dashed") + 
    geom_vline(data = surgCosts, aes(xintercept = Lap.prim.hi, color = "deepskyblue"), lty = "dashed") + 
    geom_vline(data = surgCosts, aes(xintercept = Fx.tert.lo, color = "yellowgreen")) + 
    geom_vline(data = surgCosts, aes(xintercept = Fx.tert.hi, color = "yellowgreen")) + 
    scale_color_manual(name = "Reported cost", values = c("red4" = "red4", "deepskyblue" = "deepskyblue", "yellowgreen" = "yellowgreen"), 
         labels = c("Int1", "Int2", "Int3")) + 
    theme(axis.ticks = element_blank(), axis.text.y = element_blank(), legend.position = "right") 

Ed ecco l'output sto ottenendo: enter image description here

Qualsiasi aiuto sarebbe molto apprezzato!

+0

Questo sarebbe molto più semplice se si fornissero i propri set di dati, preferibilmente usando, ad esempio, 'dput (modCosts)' e 'dput (surgCosts)'. – jlhoward

+2

C'è un argomento 'show_guide = ...' a 'geom_vline (...)' che di default è 'FALSE'. – jlhoward

+1

Suggerirei di comprimere tutti questi livelli in una sola geom_vline utilizzando un singolo frame di dati e mappando l'estetica del colore. – joran

risposta

3

C'è un argomento show_guide=...-geom_vline(...) (e _hline e _abline) che per default è FALSE. Evidentemente il punto di vista era che la maggior parte delle volte non si desidera che i colori della linea vengano visualizzati in una legenda. Ecco un esempio.

df <- mtcars 
library(ggplot2) 
ggp <- ggplot(df, aes(x=wt, y=mpg, fill=factor(cyl))) + 
    geom_point(shape=21, size=5)+ 
    geom_vline(data=data.frame(x=3),aes(xintercept=x, color="red"), show_guide=TRUE)+ 
    geom_vline(data=data.frame(x=4),aes(xintercept=x, color="green"), show_guide=TRUE)+ 
    geom_vline(data=data.frame(x=5),aes(xintercept=x, color="blue"), show_guide=TRUE) 

ggp +scale_color_manual("Line.Color", values=c(red="red",green="green",blue="blue"), 
        labels=paste0("Int",1:3)) 

BTW un modo migliore per specificare la scala, se ti ostini a usare i nomi dei colori è questo:

ggp +scale_color_identity("Line.Color", labels=paste0("Int",1:3), guide="legend") 

che produce la trama identica sopra.

+0

'show_guide' è ora chiamato' show.legend' –

Problemi correlati