2017-08-11 3 views
0

J'ai donc comparé deux groupes avec un troisième utilisant une plage d'entrées. Pour chacun des trois groupes, j'ai une valeur et un intervalle de confiance pour une gamme d'entrées. Pour les deux comparaisons, j'ai aussi une valeur p pour cette gamme d'entrées. Maintenant, je voudrais tracer toutes les cinq séries de données, mais utiliser un second axe pour les valeurs p.Comment pointer chaque graphique pour corriger l'axe y (plusieurs tracés, deux axes y, dans R avec ggplot2)

Je suis capable de le faire, sauf pour une chose: comment puis-je m'assurer que R sait lequel des tracés à affecter au second axe?

Voilà à quoi il ressemble maintenant. Les deux séries de données du bas doivent être mises à l'échelle vers l'axe Y vers la droite.

ggplot(df) + 
    geom_pointrange(aes(x=x, ymin=minc, ymax=maxc, y=meanc, color="c")) + 
    geom_pointrange(aes(x=x, ymin=minb, ymax=maxb, y=meanb, color="b")) + 
    geom_pointrange(aes(x=x, ymin=mina, ymax=maxa, y=meana, color="a")) + 
    geom_point(aes(x=x, y=c, color="c")) + 
    geom_point(aes(x=x, y=b, color="b")) + 
    scale_y_continuous(sec.axis = sec_axis(~.*0.2)) 

df est un dataframe dont les noms de colonne sont toutes les variables que vous voyez ci-dessus, toutes les valeurs de ligne sont les points de données correspondants.

enter image description here

+1

Vous pouvez faire évoluer les valeurs p/0,2 –

+0

@SRivero Ha, I comme cette idée. Utilisera cela pour l'instant. Bien que je pense qu'il existe un moyen de donner à chaque parcelle un attribut qui définit son unité ou axe des y, de sorte que vous n'avez pas besoin de modifier vos valeurs de données juste pour le tracer. – Leo

+3

Pas d'utilisation de ggplot. https://stackoverflow.com/questions/3099219/plot-with-2-y-axes-one-y-axis-on-the-left-and-another-y-axis-on-the-right –

Répondre

2

Vous pouvez obtenir ce que vous voulez, rester fidèle au canon de Hadley et la grammaire de l'Evangile Graphics, si vous transformez votre DF de large et à long, et d'employer un différents aes (c.-forme, la couleur, le remplissage) entre les moyens et CI.

Vous n'avez pas fourni d'exemple reproductible, donc j'utilise le mien. (Dput à la fin du poste)

df2 <- df %>% 
     mutate(CatCI = if_else(is.na(CI), "", Cat)) # Create a categorical name to map the CI to the legend. 

ggplot(df2, aes(x = x)) + 
     geom_pointrange(aes(ymin = min, ymax = max, y = mean, color = Cat), shape = 16) + 
     geom_point(data = dplyr::filter(df2,!is.na(CI)), ## Filter the NA within the CI 
      aes(y = (CI/0.2), ## Transform the CI's y position to fit the right axis. 
      fill = CatCI), ## Call a second aes the aes 
      shape = 25, size = 5, alpha = 0.25) + ## I changed shape, size, and fillto help with visualization 
     scale_y_continuous(sec.axis = sec_axis(~.*0.2, name = "P Value")) + 
     labs(color = "Linerange\nSinister Axis", fill = "P value\nDexter Axis", y = "Mean") 

Résultat:

![enter image description here

dataframe:

df <- structure(list(Cat = c("a", "b", "c", "a", "b", "c", "a", "b", 
"c", "a", "b", "c", "a", "b", "c"), x = c(2, 2, 2, 2.20689655172414, 
2.20689655172414, 2.20689655172414, 2.41379310344828, 2.41379310344828, 
2.41379310344828, 2.62068965517241, 2.62068965517241, 2.62068965517241, 
2.82758620689655, 2.82758620689655, 2.82758620689655), mean = c(0.753611797661977, 
0.772340941644911, 0.793970086962944, 0.822424652072316, 0.837015408776649, 
0.861417383841253, 0.87023105762465, 0.892894201949377, 0.930096326498796, 
0.960862178366363, 0.966600321596147, 0.991206984637544, 1.00714201832596, 
1.02025006679944, 1.03650896186786), max = c(0.869753641121797, 
0.928067675294351, 0.802815304215019, 0.884750162053761, 1.03609814491961, 
0.955909854315582, 1.07113399603486, 1.02170928767791, 1.05504846273091, 
1.09491706586801, 1.20235615364205, 1.12035782960649, 1.17387406039167, 
1.13909154635088, 1.0581878034897), min = c(0.632638511783381, 
0.713943701135991, 0.745868763626567, 0.797491261486603, 0.743382797144923, 
0.827693203320894, 0.793417962991821, 0.796917421637021, 0.92942504556723, 
0.89124101157585, 0.813058838839382, 0.91701749675892, 0.943744642652422, 
0.912869230576973, 0.951734254896252), CI = c(NA, 0.164201137643034, 
0.154868406784159, NA, 0.177948094206453, 0.178360305763648, 
NA, 0.181862670931493, 0.198447350829814, NA, 0.201541499248143, 
0.203737532636542, NA, 0.205196077692786, 0.200992205838595), 
    CatCI = c("", "b", "c", "", "b", "c", "", "b", "c", "", "b", 
    "c", "", "b", "c")), .Names = c("Cat", "x", "mean", "max", 
"min", "CI", "CatCI"), row.names = c(NA, 15L), class = "data.frame")