2017-10-19 5 views
0

Mes données ressemble à ceci:Réorganiser ne fonctionne pas après avoir ajouté la deuxième geom_points

> head(GEE) 

    trait beta se  p analysis signif 
1 trait1 0.078 0.01 9.0e-13 group1 1 
2 trait2 0.076 0.01 1.7e-11 group1 1 
3 trait3 0.063 0.01 1.8e-08 group1 1 
4 trait4 0.013 0.01 .06  group1 0 
5 trait5 0.018 0.01 .54  group1 0 
6 trait6 -0.014 0.01 .64  group1 0 

Je suis en train de faire un terrain avec gglot2 de points et errorbars qui sont ordonnées sur la deuxième colonne bêta nommée. Cela fonctionne très bien avec le code suivant:

ggplot(GEE, aes(y=beta, x=reorder(trait, beta), group=analysis)) + 
    geom_point(aes(color=analysis)) + 
    geom_errorbar(aes(ymin=beta-2*se, ymax=beta+2*se,color=analysis), width=.2, 
       position=position_dodge(.9)) + 
    theme_light() + 
    coord_flip() 

Cependant, je veux ajouter des astérisques pour les points importants, pour lesquels j'ai un morceau de code supplémentaire, qui ajoute avec succès astérisques à des points importants:

geom_point(data = GEE[GEE$signif == 1, ], 
      color="red", 
      shape = "*", 
      size=12, 
      show.legend = F) + 

Lors de l'ajout à la commande précédente situeraient au-dessus, la commande complète ressemble à ceci:

ggplot(GEE, aes(y=beta, x=reorder(trait, beta), group=analysis)) + 
    geom_point(data = GEE[GEE$signif == 1, ], 
      color="red", 
      shape = "*", 
      size=12, 
      show.legend = F) + 
    geom_point(aes(color=analysis)) + 
    geom_errorbar(aes(ymin=beta-2*se, ymax=beta+2*se,color=analysis), width=.2, 
       position=position_dodge(.9)) + 
    theme_light() + 
    coord_flip() 

le problème avec le code après avoir ajouté le astérisques est cependant que cela annule d'une façon ou d'une autre le réordonnancement que j'ai spécifié avec "x = reorder (trait, beta)". La commande est maintenant complètement différente. Pourquoi? : '(

MISE À JOUR. @Lamia noté dans les commentaires que le problème n'a pas pu être recréée avec les données qui sont présentées dans ce poste Les données de ce poste ne montre que les premières lignes qui sont tous du même groupe (groupe1, voir la colonne "analyse"), mais dans mon ensemble de données complet, il y a trois groupes: la commande ggplot2 trace ces trois groupes différents avec des couleurs différentes Je ne peux reproduire le problème que lorsque je lis dans les trois groupes, il semble que cela peut avoir quelque chose à voir avec ce problème ...

MISE à JOUR 2: Comme suggéré @Lamia (désolé, devrait ha avons fait cela pour commencer), j'ai ajouté des données ci-dessous qui reproduit le problème:

trait,beta,se,p,analysis,signif 
trait1,0.078,0.01,9.00E-13,group1,1 
trait2,0.076,0.01,1.70E-11,group1,1 
trait3,-0.032,0.01,0.004,group1,0 
trait4,0.026,0.01,0.024,group1,0 
trait5,0.023,0.01,0.037,group1,0 
trait1,0.042,0.01,4.50E-04,group2,1 
trait2,0.04,0.01,0.002,group2,1 
trait3,0.03,0.01,0.025,group2,0 
trait4,0.025,0.01,0.078,group2,0 
trait5,0.015,0.01,0.294,group2,0 
trait1,0.02,0.01,0.078,group3,0 
trait2,0.03,0.01,0.078,group3,0 
trait3,0.043,0.01,1.90E-04,group3,0 
trait4,0.043,0.01,2.40E-04,group3,1 
trait5,0.029,0.01,0.013,group3,0 
+1

Je ne peux pas reproduire votre problème, l'ordre semble être le même dans les deux cas (1,2,3,5,4,6). – Lamia

+0

Merci pour votre vérification! J'ai plus de 1 groupe, et dans le post il montre seulement les premières rangées de mes données qui sont toutes de groupe1. Je ne peux pas reproduire le problème lorsque je réduis mes données pour n'inclure qu'un seul groupe. Quand j'inclus tous les groupes (trois groupes, spécifiés dans la colonne "analyse"), alors je peux reproduire le problème. Merci, je vais mettre à jour le post. – Abdel

+1

Vous devez inclure dans votre exemple une image qui peut être utilisée pour reproduire votre problème. Ce n'est pas forcément votre jeu de données complet s'il est trop grand. – Lamia

Répondre

2

Plusieurs suggestions pour examen ...

1: votre Wrangle trame de données avant de l'alimenter en ggplot(). Puisque trait est une variable catégorielle, vous pouvez spécifier ses niveaux en tant que facteur explicitement.

library(dplyr) 

g2 <- GEE %>% 
    mutate(trait = factor(trait, levels = trait[order(beta[analysis == "group1"])])) 

> levels(g2$trait) 
[1] "trait3" "trait5" "trait4" "trait2" "trait1" 

Nous pouvons visuellement vérifier que l'ordre des traits selon les valeurs bêta du groupe 1 sont 3-5-4-2-1:

ggplot(GEE, aes(x = beta, y = analysis, label = trait)) + geom_label() 

plot1

2: Utilisez uniquement une source de données pour ggplot(), si possible. Cela garantit que toutes les liaisons de mappage esthétique sont cohérentes, & est également plus simple à maintenir.

ggplot(g2, aes(y = beta, x = trait, group = analysis, color = analysis, 
       ymin = beta - 2*se, ymax = beta + 2*se)) + 
    geom_point(aes(alpha = signif), # hide non-significant points while using the same dataset 
      color = "red") +  # override 'color = analysis' in ggplot() 
    geom_point() + 
    geom_errorbar() + 
    scale_alpha_identity() 

3: réutiliser le même position_dodge() pour tous les geoms pertinents. Encore une fois, c'est plus simple à maintenir si vous souhaitez changer la largeur de l'esquive la prochaine fois.

pd <- position_dodge(0.9) 

ggplot(g2, aes(y = beta, x = trait, group = analysis, color = analysis, 
       ymin = beta - 2*se, ymax = beta + 2*se)) + 
    geom_point(aes(alpha = signif), 
      color = "red", shape = "*", size = 12, show.legend = F, 
      position = pd) + 
    geom_point(position = pd) + 
    geom_errorbar(width=.2, position = pd) + 
    scale_alpha_identity() + 
    theme_light() + 
    coord_flip() 

Résultat (trait est trié comme 3-5-4-2-1, de bas en haut):

plot2

données:

GEE <- read.csv(
    text = 
"trait,beta,se,p,analysis,signif 
trait1,0.078,0.01,9.00E-13,group1,1 
trait2,0.076,0.01,1.70E-11,group1,1 
trait3,-0.032,0.01,0.004,group1,0 
trait4,0.026,0.01,0.024,group1,0 
trait5,0.023,0.01,0.037,group1,0 
trait1,0.042,0.01,4.50E-04,group2,1 
trait2,0.04,0.01,0.002,group2,1 
trait3,0.03,0.01,0.025,group2,0 
trait4,0.025,0.01,0.078,group2,0 
trait5,0.015,0.01,0.294,group2,0 
trait1,0.02,0.01,0.078,group3,0 
trait2,0.03,0.01,0.078,group3,0 
trait3,0.043,0.01,1.90E-04,group3,0 
trait4,0.043,0.01,2.40E-04,group3,1 
trait5,0.029,0.01,0.013,group3,0") 

> levels(GEE$trait) # default order is 1-2-3-4-5 
[1] "trait1" "trait2" "trait3" "trait4" "trait5" 
+0

C'est merveilleux, je t'aime <3 – Abdel

1

Essayez ceci:

library(tidyverse) 

GEE <- tribble(
    ~trait, ~beta, ~se, ~p, ~analysis, ~signif, 
    "trait1", 0.078, 0.01, 9.0e-13, "group1", 1, 
    "trait2", 0.076, 0.01, 1.7e-11, "group1", 1, 
    "trait3", 0.063, 0.01, 1.8e-08, "group1", 1, 
    "trait4", 0.013, 0.01, .06, "group1", 0, 
    "trait5", 0.018, 0.01, .54, "group1", 0, 
    "trait6", -0.014, 0.01, .64, "group1", 0 
) 

GEE %>% 
    ggplot(aes(y = beta, x = reorder(trait, beta)), group = analysis) + 
    geom_point(aes(color = analysis)) + 
    geom_errorbar(aes(ymin = beta - 2 * se, 
        ymax = beta + 2 * se, 
        color = analysis, 
        width = 0.2), 
       position = position_dodge(0.9)) + 
    geom_point(data = GEE[GEE$signif == 1, ], 
      color="red", 
      shape = "*", 
      size=12, 
      show.legend = F) + 
    theme_light() + 
    coord_flip() 

Il change cette parcelle:

enter image description here

Et le fait ressembler à ceci:

enter image description here

Est-ce ce que vous cherchez?

+0

Merci! Mais cela n'a pas encore fonctionné pour moi ... J'ai ajouté des données qui reproduisent mon problème! – Abdel