2016-12-07 2 views
0

J'ai essayé d'aligner différents graphiques obtenus en utilisant geom_bar. Quand je cours chaque parcelle une par une, cela fonctionne bien. J'ai ce que je veux. Mais quand j'agrègent tous dans un complot multiple, j'ai toujours le même ....La combinaison de ggplots efface le tracé d'origine?

Pour être clair: c'est la première parcelle qui est bon: enter image description here

Voici ce que je suis quand je combiner les deux parcelles. La première colonne doit être la même que la courbe ci-dessus ...: enter image description here

Je ne trouve pas le problème. Ceci est mon script:

##### colonne 6 
i=6 
col=compil[,i] 
nom=names(compil[i]) 
maxi = max(col) 
mini = min(col) 

p5 <- ggplot(compil,aes(x=NIVEAU, y=col)) + 
    geom_bar(stat="identity",position = "identity",aes(width=0.85), 
      fill=ifelse(col > 1, rgb(63,202,20, maxColorValue = 255), 
         ifelse (col< -1,rgb(204,0,0, maxColorValue = 255), 
           rgb(160,160,160, maxColorValue=255)))) + 
    geom_hline(yintercept=0,color=rgb(160,160,160, maxColorValue=255))+ 
    coord_flip(ylim=c(-2.5,2.5)) + 
    labs(x="", y="", title= nom) + guides(fill=F) + 
    theme(panel.grid.major=element_blank(), panel.grid.minor.x=element_blank(), 
     panel.background = element_blank(), axis.text.x=element_blank(), 
     axis.ticks = element_blank(),axis.line= element_blank(), 
     plot.margin=unit(c(1,-1,1,-1),"lines"), plot.title = element_text(size=10)) 
print(p5) 

##### colonne 7 
i=7 
col=compil[,i] 
nom=names(compil[i]) 
maxi = max(col) 
mini = min(col) 

p6 <- ggplot(compil,aes(x=NIVEAU, y=col)) + 
    geom_bar(stat="identity",position = "identity",aes(width=0.85), 
      fill=ifelse(col > 1, rgb(63,202,20, maxColorValue = 255), 
         ifelse (col< -1,rgb(204,0,0, maxColorValue = 255), 
           rgb(160,160,160, maxColorValue=255)))) + 
    geom_hline(yintercept=0,color=rgb(160,160,160, maxColorValue=255))+ 
    coord_flip(ylim=c(-2.5,2.5)) + 
    labs(x="", y="", title= nom) + guides(fill=F) + 
    theme(panel.grid.major=element_blank(), panel.grid.minor.x=element_blank(), 
     panel.background = element_blank(), axis.text=element_blank(), 
     axis.ticks = element_blank(),axis.line= element_blank(), 
     plot.margin=unit(c(1,-1,1,-1),"lines"), plot.title = element_text(size=10)) 
print(p6) 

vplayout <- function(x, y) viewport(layout.pos.row = x, layout.pos.col = y) 
grid.newpage() 
pushViewport(viewport(layout = grid.layout(1, 3))) 
print(p5, vp = vplayout(1, 1:2)) 
print(p6, vp = vplayout(1, 3)) 

Si quelqu'un pouvait m'aider à trouver l'erreur, j'apprécie vraiment !! Bien sûr, je fais quelque chose de mal mais quoi ?? Merci d'avance pour votre temps et votre aide!

+0

il pourrait être dû à 'eval paresseux de ggplot' et vous changer le même ensemble de valeurs pour chaque parcelle, mais il est difficile de dire sans quelques exemples de données. peut-être renommer les variables de la colonne 7 de sorte que les noms soient uniques à ceux de la colonne 6 – Nate

+0

Pour tester la suggestion de @DayDay, essayez d'imprimer p5 après avoir généré p6. –

+0

Je pensais faire une boucle car c'est pourquoi j'ai gardé le même nom ... mais tu as raison: j'étais trop paresseux aussi! En renommant toutes les variables comme l'a dit @Nathan Day, il fonctionne maintenant comme expexted! Merci beaucoup! – Sandrine

Répondre

0

tl; dr Essayer le remplacement aes(x=NIVEAU, y=col) avec aes_string(x="NIVEAU", y = nom, fill = nom), où nom = names(compil)[i].


col semble être un vecteur, mais à l'intérieur aes() vous devez passer des variables non cotées de la data.frame. Passer des valeurs directement entraînera des surprises car ggplot2 ne sait pas vraiment où chercher "col" lors de la construction de l'intrigue - il cherche une telle variable dans les données qui étaient liées à l'environnement de l'intrigue, et ce n'est pas là, donc est de regarder dans l'environnement global ...

Pour la même raison, les choses fill = ifelse() ne peuvent pas fonctionner comme prévu et doivent être supprimés. Le mappage des couleurs sur les valeurs est le travail d'une échelle dans ggplot2, il suffit donc de mapper fill = nom, puis d'ajouter un scale_fill_manual(...) ou tout autre type d'échelle compatible.

(deviner, car il n'y a pas de code reproductible)

+0

Merci @baptiste pour votre commentaire. Je ne suis pas familier avec l'utilisation de "aes". Grâce à vous, j'ai appris quelque chose !! ... Malheureusement ça ne marche pas mais je ne suis pas sûr de bien l'utiliser ... Je vais pousser un peu plus loin pour écrire un meilleur script. – Sandrine