2017-06-24 3 views
0

J'ai un ggplot dans lequel j'utilise la couleur pour mon geom_points en fonction de l'une de mes colonnes (mon traitement) et ensuite j'utilise le scale_color_manual pour choisir les couleurs.ggplot2 - ajouter une légende manuelle à plusieurs calques

Je reçois automatiquement ma légende droite

Le problème est que je dois tracer des lignes horizontales qui ont à voir avec le dispositif expérimental mis en place, que je fais avec geom_vline, mais je ne sais pas comment Ajouter manuellement une légende distincte qui ne joue pas avec celui que j'ai déjà et qui indique ce que ces lignes sont.

Je le code suivant

ggplot(dcons.summary, aes(x = meters, y = ymean, color = treatment, shape = treatment)) + 
    geom_point(size = 4) + 
    geom_errorbar(aes(ymin = ymin, ymax = ymax)) + 
    scale_color_manual(values=c("navy","seagreen3"))+ 
    theme_classic() + 
    geom_vline(xintercept = c(0.23,3.23, 6.23,9.23), color= "bisque3", size=0.4) + 
    scale_x_continuous(limits = c(-5, 25)) + 
    labs(title= "Sediment erosion", subtitle= "-5 -> 25 meters; standard deviation; consistent measurements BESE & Control", x= "distance (meters)", y="erosion (cm)", color="Treatment", shape="Treatment") 

enter image description here

Je voudrais juste besoin d'une légende supplémentaire sous celui de « traitement » qui dit « BESE TERRAINS LOCATION » et qui est lié aux lignes grises

je cherche une solution, j'ai essayé d'utiliser "scale_linetype_manual" et aussi "guides", mais je ne suis pas pour y arriver

Répondre

0

Comme vous n'avez fourni aucun exemple reproductible, j'ai utilisé des données de l'ensemble de données mtcars. En outre, j'ai modifié this similar answer un peu. Comme vous avez déjà spécifié la couleur et en plus le facteur de remplissage ne fonctionne pas ici, vous pouvez utiliser le type de ligne comme second paramètre dans aes Wich peut être dans la légende:

xid <- data.frame(xintercept = c(15,20,30), lty=factor(1)) 
mtcars %>% 
    ggplot(aes(mpg ,cyl, col=factor(gear))) + 
     geom_point() + 
     geom_vline(data=xid, aes(xintercept=xintercept, lty=lty) , col = "red", size=0.4) + 
     scale_linetype_manual(values = 1, name="",label="BESE PLOTS LOCATION") 

enter image description here

ou sans le deuxième data.frame:

ggplot() + 
     geom_point(data = mtcars,aes(mpg ,cyl, col=factor(gear))) + 
     geom_vline(aes(xintercept=c(15,20,30), lty=factor(1)), col = "red", size=0.4)+ 
     scale_linetype_manual(values = 1, name="",label="BESE PLOTS LOCATION") 
+0

Oh, c'était si simple. J'essayais déjà le scale_linetype_manual mais je n'ai pas ajouté les aes à geom_vline comme vous l'avez fait avec intelligence. – Locean