2013-06-06 6 views
0

[Edité pour que le code exécutable et deuxième approche]« dupliquer » élément de légende dans ggplot2 R

J'ai trouvé plusieurs liens qui semblent pertinentes here, here et here mais ne peut pas Je vais directement déterminer comment les appliquer à mon défi: J'ai un tracé de ligne créé avec ggplot2 qui utilise une trame de données incluant des intervalles de confiance supérieurs et inférieurs. Je veux qu'ils apparaissent simplement dans la légende comme "99% CI", pas séparément comme, disons, "CI supérieur" et "CI inférieur".

library(ggplot2) 
library(reshape2) 

gmm <- data.frame(x=runif(10), observed=runif(10), theoretical=runif(10), 
       upper=runif(10), lower=runif(10)) 
gmm.m <- melt(gmm, id="x") 

p1 <- ggplot(data=gmm.m, aes(x, value, colour=variable)) + geom_line() 

p1 <- p1 + scale_colour_manual(
     values=c("black", "#F8766D", "#7DAF01", "#7DAF01"), 
     labels=c("Observed","Theoretical","99% Confidence Intervals","")) 

La définition de la dernière étiquette de légende à la valeur vide "" est aussi proche que je viens de la trier. Donc, pour être clair, je veux que les deux CI apparaissent dans la même couleur sur l'intrigue, je ne veux pas qu'ils apparaissent comme des éléments de légende séparés.

Je soupçonne qu'une façon de le faire est de faire fondre les autres des variables tout en sautant « bas », et puis ajouter cette suite. Mais, en dehors de (personnellement) trouver cette approche inélégante (plus facile à dire "ajouter tout sauf masquer la légende pour celui-ci"), mes tentatives pour faire cela ont également échoué.

library(ggplot2) 
library(reshape2) 
gmm <- data.frame(x=runif(10), observed=runif(10), theoretical=runif(10), upper=runif(10)) 
gmm.m <- melt(gmm, id="x") 
gmm.b <- data.frame(x=runif(10),variable='lower', value=runif(10)) 
p1 <- ggplot(data=gmm.m, aes(x, value, colour=variable)) + geom_line() + scale_colour_manual(values=c("black", "#F8766D", "#7DAF01"), labels=c("Observed","Theoretical","99% Confidence Intervals","")) 
p1 <- p1 + geom_line(data=gmm.b, aes(x=x, y=value, legend=FALSE)) 
plot(p1) 
+3

Vous avez rendu la réponse très difficile en ne fournissant pas d'exemple reproductible. Mais si je devais deviner, je dirais que la réponse impliquerait d'utiliser à la fois l'esthétique des couleurs pour définir les étiquettes/légendes comme vous le souhaitez et d'utiliser l'esthétique du groupe pour assurer que chaque ligne est dessinée correctement. – joran

+0

Espérons que les modifications rendent cela un peu plus facile à suivre. Désolé pour ça, je postais à la fin d'une longue et dure journée de codage. – user1600439

Répondre

0

est ici la méthode que je faisais allusion dans mon commentaire: (. Je convertir seulement à caractère parce que son un peu plus simple à manipuler que des facteurs, à mon humble avis)

dat <- rbind(gmm.m,gmm.b) 
dat$variable <- as.character(dat$variable) 
dat$var1 <- dat$variable 
dat$var1[dat$var1 %in% c('upper','lower')] <- '99% CI' 

ggplot(dat,aes(x = x,y = value)) + 
    geom_line(aes(colour = var1,group = variable)) 

Comme

I dit, utiliser une variable pour délimiter le groupement (pour dessiner les lignes) et une autre variable pour délimiter les points qui ont la même couleur.

Questions connexes