2 votes

Tracé avec deux axes x différents pour la même variable dans R

J'essaie de créer un graphique qui affiche une ligne avec deux axes x, l'un étant un numérique continu et l'autre un discret.

Voici un exemple de données :

df <-cbind.data.frame("Category"=c("A","A","A","A","A","B","B","B","B","B"), 
                   "Y"=c(5,6,4,8,9,4,5,3,7,8),
                   "X1"=c(0,10,20,30,40,0,10,20,30,40),
                   "X2"=c(0,0,1,1,2,0,1,2,2,3))

J'ai essayé d'ajouter un axe secondaire et de le redimensionner, mais comme mes deux variables ne sont pas proportionnelles, je ne sais pas comment redimensionner pour que le même point Y de la ligne corresponde aux deux axes x.

ggplot(data=df) + 
 geom_path(aes(y=Y,x=X1),color="red")+ 
 geom_path(aes(y=Y,x=X2*10),color="blue")+ 
 facet_wrap(~Category)+ 
 scale_y_continuous("Y")+   
 scale_x_continuous("X1",sec.axis = sec_axis(~ .*1/10, "X2"))

J'ai lu différents problèmes avec deux axes, mais je n'ai pas réussi à trouver une solution à mon problème.

Je cherche quelque chose comme ça :

Expected output

J'apprécierai beaucoup toute aide à ce sujet !

2voto

r2evans Points 1187

Le graphique que vous fournissez ne met pas en évidence une relation algébrique claire, je vais donc vous donner un exemple de deuxième axe des x complètement arbitraire.

library(ggplot2)
ggplot(mtcars, aes(mpg, disp)) +
  geom_point() +
  scale_x_continuous(sec.axis=sec_axis(~., breaks=c(15,20,30), labels=c('a','b','c')))

sample ggplot2 axis

Le premier argument est la transformation " ~. "(essentiellement x2=x1 ) et est nécessaire, donc dans ce cas c'est une transformation 1 pour 1. Les deux autres sont relativement claires, vous placez 'a' à l'adresse x=15 , 'b' à l'adresse x=20 etc. Je ne pense pas qu'il y ait un moyen de mettre les deux sur le même axe (avec ggplot2 seul).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X