2017-09-30 2 views
1

J'utilise des barres et des lignes pour créer mon tracé. Le code de démonstration est la suivante:Créer une légende avec des formes et des couleurs manuelles

timestamp <- seq(as.Date('2010-01-01'),as.Date('2011-12-01'),by="1 mon") 
data1 <- rnorm(length(timestamp), 3000, 30) 
data2 <- rnorm(length(timestamp), 30, 3) 
df <- data.frame(timestamp, data1, data2) 

p <- ggplot() 
p <- p + geom_histogram(data=df,aes(timestamp,data1),colour="black",stat="Identity",bindwidth=10) 
p <- p + geom_line(data=df,aes(timestamp,y=data2*150),colour="red") 
p <- p + scale_y_continuous(sec.axis = sec_axis(~./150, name = "data2")) 
p <- p + scale_colour_manual(name="Parameter", labels=c("data1", "data2"), values = c('black', 'red')) 
p <- p+ scale_shape_manual(name="Parameter", labels=c("data1", "data2"), values = c(15,95)) 
p 

Il en résulte un terrain comme celui-ci:

enter image description here

Ce chiffre ne dispose pas d'une légende. J'ai suivi this réponse pour créer une légende personnalisée mais cela ne fonctionne pas dans mon cas. Je veux une forme de carré et de ligne dans ma légende correspondant aux barres et à la ligne. Comment pouvons-nous l'obtenir?

Je veux la légende comme le montre l'image ci-dessous: enter image description here

Répondre

2

Pour le type de données que vous souhaitez afficher, geom_bar est un meilleur ajustement alors geom_histogram. Lorsque vous devez manipuler l'apparence de la légende (s), vous devez placer les pièces colour = ... à l'intérieur du aes. Pour obtenir le résultat souhaité, il est préférable d'utiliser différents types de légende pour la ligne et les barres. De cette façon, vous êtes mieux en mesure de changer l'apparence des légendes avec guide_legend et override.aes.

Une proposition de votre problème:

ggplot(data = df) + 
    geom_bar(aes(x = timestamp, y = data1, colour = "black"), 
      stat = "Identity", fill = NA) + 
    geom_line(aes(x = timestamp, y = data2*150, linetype = "red"), colour = "red", size = 1) + 
    scale_y_continuous(sec.axis = sec_axis(~./150, name = "data2")) + 
    scale_linetype_manual(labels = "data2", values = "solid") + 
    scale_colour_manual(name = "Parameter\n", labels = "data1", values = "black") + 
    guides(colour = guide_legend(override.aes = list(colour = "black", size = 1), 
           order = 1), 
     linetype = guide_legend(title = NULL, 
           override.aes = list(linetype = "solid", 
                colour = "red", 
                size = 1), 
           order = 2)) + 
    theme_minimal() + 
    theme(legend.key = element_rect(fill = "white", colour = NA), 
     legend.spacing = unit(0, "lines")) 

qui donne:

enter image description here

+0

Je ne suis toujours pas en mesure de changer les formes dans la légende. J'ai ajouté l'intrigue prévue dans ma question. –

+0

@HaroonRashid voir la mise à jour, HTH – Jaap