2015-02-25 15 views
7

Sto creando una figura in cui ho una linea e fasce di sicurezza intorno ad esso. Per fare questo, sto usando sia geom_line e geom_ribbon in ggplot2 in R. Il problema è come gestire la legenda. In esso, vengono aggiunte le barre e dopo aver cercato su Google per un bel po 'capisco che è un problema comune. La maggior parte delle soluzioni che ho trovato riguardano i barattoli (ad esempio il ricettario ggplot). Ho anche trovato soluzioni per sopprimerlo, ma questo non ha funzionato per me.Legenda con geom_line e geom_ribbon

Di seguito sono presenti tre grafici che illustrano il problema. Innanzitutto, quando traccia solo la linea, sembra buona. Quindi quando aggiungo la parte del nastro del grafico, vengono aggiunte le barre. La terza trama è come voglio che guardi (elimina le barre, ovviamente). Come ottengo questo?

enter image description here

Edit: Per essere chiari, quello che voglio è quello che ho nella figura seguente (che ho fissato con MS Paint):

enter image description here

library(ggplot2) 
library(gridExtra) 

set.seed(1) 
y <- sin(seq(1, 2*pi, length.out = 100)) 
x <- 1:100 
plotdata <- data.frame(x=x, y=y, lower = (y+runif(100, -1, -0.5)), upper = (y+runif(100, 0.5, 1))) 
h1 <- ggplot(plotdata) + geom_line(aes(y=y, x=x, colour = "sin")) 
h2 <- h1 + geom_ribbon(aes(ymin=lower, ymax=upper, x=x, colour = "bands"), alpha = 0.3) 
h3 <- h2 + scale_colour_manual(name='', values=c("bands" = "grey", "sin" = "blue")) 

grid.arrange(h1, h2, h3) 

risposta

5

È possibile creare legende separate, una per il colore della linea e una per il riempimento del nastro. Quindi con scale_... imposta i nomi per la legenda in bianco. L'unico problema è che le chiavi della legenda saranno separate.

ggplot(plotdata) + geom_line(aes(y=y, x=x, colour = "sin"))+ 
     geom_ribbon(aes(ymin=lower, ymax=upper, x=x, fill = "band"), alpha = 0.3)+ 
     scale_colour_manual("",values="blue")+ 
     scale_fill_manual("",values="grey12") 

enter image description here

1

Try per mantenere il colore all'esterno aes, non verrà visualizzato nella legenda:

h1 + geom_ribbon(aes(ymin=lower, ymax=upper, x=x), colour = "red", alpha = 0.3) 

enter image description here

+0

I * Non * vuole che per essere nella leggenda, però. Questo è il mio problema, sfortunatamente. Ho aggiornato il mio post con un'immagine (MS Paint modificata) di ciò che voglio che assomigli. – hejseb

2

Se si desidera visualizzare il colore sulla leggenda, probabilmente necessario ricorrere a l'aggiunta di alcune ulteriori geom_line s. Non utilizzare un colore in geom_ribbon e quindi aggiungere upper e lower righe.

h2 <- h1 + geom_ribbon(aes(ymin=lower, ymax=upper, x=x), alpha = 0.3) + 
    geom_line(aes(x=x, y = lower, color = "bands")) + 
    geom_line(aes(x=x, y = upper, color = "bands")) 

image

EDIT: È inoltre possibile utilizzare una scala fill.

h1 <- ggplot(plotdata) + geom_line(aes(y=y, x=x, colour = "sin", fill="sin")) 
h2 <- h1 + geom_ribbon(aes(ymin=lower, ymax=upper, x=x, fill="bands"), alpha = 0.3) + 
    geom_line(aes(x=x, y = lower, color = "bands")) + 
    geom_line(aes(x=x, y = upper, color = "bands")) 
h3 <- h2 + scale_colour_manual(name='', values=c("bands" = "grey", "sin" = "blue")) + 
    scale_fill_manual(name = '', values=c("bands" = "grey12", "sin" = "grey")) 

grid.arrange(h1, h2, h3) 

image2

È anche possibile impostare "bands" = "transparent" nella dichiarazione colore, se non si desidera che il (poco visibile) linea grigia.

+0

Che sembra vicino a quello che sto mirando! C'è un modo per rendere l'intera scatola "bande" piena della tonalità di grigio più scura? Ho aggiornato il mio post originale con un'immagine di ciò che voglio che assomigli. – hejseb

Problemi correlati