Graphique à 2 axes réalisé avec le logiciel R

Il est possible avec le logiciel R de tracer un graphique avec 2 axes des ordonnées (ou même 2 axes des abscisses).

Une courbe noire correspondant à l'axe de gauche et une rouge à l'axe de droite (exemple)

Voici un graphique présentant 2 axes des ordonnées pour légender une superposition de courbes

Superposition de courbe avec plusieurs axes avec le logiciel R

# Données d'abscisses (ce n'est qu'un exemple)

x=rep(1:25)*2.5

# Données des ordonnées

y_gauche=c(0,0,0,100,200,50,5,4,3,2,5,6,4,3,1,0,0,0,0,10,15,17,9,4,0) 

#Teneur en glucides (mesurée en fonction de la taille du précipité)

y_droite=c(0,0,0,0,0,0,0,0,0,0,0,1,1,2,3,2,2,1,0,0,0,0,0,0,0)

##### TRES IMPORTANT POUR POUVOIR AJOUTER DES AXES SUPPLÉMENTAIRE (tel un axe des ordonnées à droite)

par(mar=c(4,4,3,5))   # par redéfinit les marges du graphiques pour laisser de la place à droite pour l'ajout d'un axe.

# Le graphique (première courbe noire)

plot(x, y_gauche, pch=16, axes=F, ylim=c(0,300), xlab="", ylab="", type="o",col="black", main="Graphique à 2 axes")

# Légende de l'axe Y de gauche

axis(2, ylim=c(0,300),col="black")

mtext("Axe de la courbe noire",side=2,line=2.5)

box() # pour encadrer le graphique

3. Ajouter les axes

# Ajout de la courbe rouge correspondant à l'axe de droite

par(new=T) # Autorise la superposition des courbes et non le remplacement d'un graphique par un autre

plot(x, y_droite, pch=15,  xlab="", ylab="", ylim=c(0,3), axes=F, type="o", col="red")

# Légende de l'axe Y de droite

mtext("Axe de la courbe rouge",side=4,col="red",line=2.5)

axis(4, ylim=c(0,3), col="red",col.axis="red")

# AXE X

axis(1,pretty(range(x),10)) # la commande pretty permet de ne pas afficher la totalité des valeurs de x mais plutôt des intervalles

mtext("Volume d'élution (mL)",side=1,col="black",line=2.5)

4. Ajouter une légende

# Legend

legend(x="topleft",legend=c("Courbe noire","Courbe rouge"), text.col=c("black","red"), pch=c(16,15), col=c("black","red"))

Faire la même chose sous {ggplot2}

# Créer le data frame

df <- data.frame(

  x = x,

  y_gauche = y_gauche,

  y_droite = y_droite

)

# Convertir le data frame en format "long"

df_long <- reshape2::melt(df, id.vars = "x", variable.name = "variable", value.name = "value")

# Créer le graphique

ggplot(df_long, aes(x = x, y = value, color = variable)) +

  geom_point(aes(shape = variable)) +

  geom_line() +

  scale_y_continuous(sec.axis = sec_axis(~ . * 0.01, name = "Axe de la courbe rouge")) +

  scale_color_manual(values = c("y_gauche" = "black", "y_droite" = "red")) +

  scale_shape_manual(values = c("y_gauche" = 16, "y_droite" = 15)) +

  labs(x = "Volume d'élution (mL)", y = "Axe de la courbe noire", color = "Légende", shape = "Légende") +

  theme(axis.text.x = element_text(angle = 45, hjust = 1))

Mise à jour de la page avril 2024