Changement des étiquettes d'axe

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Pierre Dutrieux
Messages : 2
Enregistré le : 07 Juil 2018, 14:04

Changement des étiquettes d'axe

Messagepar Pierre Dutrieux » 09 Juil 2018, 00:34

Bonjour,
Nouveau sur le forum, je tente de demander un peu d'aide pour modifier les étiquettes d'un axe.
À la place des indices de 1 à 24 sur le graphe, je souhaite faire figurer sur l'axe des abscisses le mois (à savoir Jan Fev Mar etc) et l'année lorsque celle-ci change (par exemple mettre l'année en étiquette au lieu du mois de décembre).
Par ailleurs, il y a en réalité beaucoup plus de stations (ici, seules 2 sont indiquées). Des idées pour faire une boucle en fonction de la station ?
Voilà mon tableau de data et mon script.
Merci !

SERIE Station Alt Precip Jour Mois Année Valeur
1 MRR097207002 DUCOS 40 RR 1 1 1962 187.8
2 MRR097207002 DUCOS 40 RR 1 2 1962 103.2
3 MRR097207002 DUCOS 40 RR 1 3 1962 50.9
4 MRR097207002 DUCOS 40 RR 1 4 1962 83.2
5 MRR097207002 DUCOS 40 RR 1 5 1962 85.9
6 MRR097207002 DUCOS 40 RR 1 6 1962 306.2
7 MRR097207002 DUCOS 40 RR 1 7 1962 134.6
8 MRR097207002 DUCOS 40 RR 1 8 1962 333.8
9 MRR097207002 DUCOS 40 RR 1 9 1962 248.3
10 MRR097207002 DUCOS 40 RR 1 10 1962 109.3
11 MRR097207002 DUCOS 40 RR 1 11 1962 112.6
12 MRR097207002 DUCOS 40 RR 1 12 1962 150.1
13 MRR097207002 DUCOS 40 RR 1 1 1963 148.7
14 MRR097207002 DUCOS 40 RR 1 2 1963 85.3
15 MRR097207002 DUCOS 40 RR 1 3 1963 68.7
16 MRR097207002 DUCOS 40 RR 1 4 1963 80.5
17 MRR097207002 DUCOS 40 RR 1 5 1963 182.7
18 MRR097207002 DUCOS 40 RR 1 6 1963 170.8
19 MRR097207002 DUCOS 40 RR 1 7 1963 231.7
20 MRR097207002 DUCOS 40 RR 1 8 1963 125.2
21 MRR097207002 DUCOS 40 RR 1 9 1963 306.8
22 MRR097207002 DUCOS 40 RR 1 10 1963 253.7
23 MRR097207002 DUCOS 40 RR 1 11 1963 111.3
24 MRR097207002 DUCOS 40 RR 1 12 1963 57.3
25 MRR097209001 FDF-MEDAILLE 510 RR 1 1 1962 489.8
26 MRR097209001 FDF-MEDAILLE 510 RR 1 2 1962 173.8
27 MRR097209001 FDF-MEDAILLE 510 RR 1 3 1962 81.7
28 MRR097209001 FDF-MEDAILLE 510 RR 1 4 1962 272.9
29 MRR097209001 FDF-MEDAILLE 510 RR 1 5 1962 86.9
30 MRR097209001 FDF-MEDAILLE 510 RR 1 6 1962 383.0
31 MRR097209001 FDF-MEDAILLE 510 RR 1 7 1962 379.4
32 MRR097209001 FDF-MEDAILLE 510 RR 1 8 1962 429.8
33 MRR097209001 FDF-MEDAILLE 510 RR 1 9 1962 358.0
34 MRR097209001 FDF-MEDAILLE 510 RR 1 10 1962 180.3
35 MRR097209001 FDF-MEDAILLE 510 RR 1 11 1962 217.8
36 MRR097209001 FDF-MEDAILLE 510 RR 1 12 1962 229.7
37 MRR097209001 FDF-MEDAILLE 510 RR 1 1 1963 247.9
38 MRR097209001 FDF-MEDAILLE 510 RR 1 2 1963 198.7
39 MRR097209001 FDF-MEDAILLE 510 RR 1 3 1963 175.6
40 MRR097209001 FDF-MEDAILLE 510 RR 1 4 1963 165.1
41 MRR097209001 FDF-MEDAILLE 510 RR 1 5 1963 330.8
42 MRR097209001 FDF-MEDAILLE 510 RR 1 6 1963 189.0
43 MRR097209001 FDF-MEDAILLE 510 RR 1 7 1963 461.6
44 MRR097209001 FDF-MEDAILLE 510 RR 1 8 1963 245.1
45 MRR097209001 FDF-MEDAILLE 510 RR 1 9 1963 389.3
46 MRR097209001 FDF-MEDAILLE 510 RR 1 10 1963 136.1
47 MRR097209001 FDF-MEDAILLE 510 RR 1 11 1963 232.3
48 MRR097209001 FDF-MEDAILLE 510 RR 1 12 1963 76.3


indices_station_DUCOS<-which(data[,2]=="DUCOS")
indices_station_FDF_MEDAILLE<-which(data[,2]=="FDF-MEDAILLE")
plot(data[,8][indices_station_DUCOS],main='Cumul Précipitations',xlab="Temps",ylab="Cumul (mm)",pch=16,cex=0.2,type="l",lwd=0.4,las=1,font.lab=2,col="red",ylim=c(0,max(data[,8])))
par(new = T)
plot(data[,8][indices_station_FDF_MEDAILLE],xlab="",ylab="",pch=16,cex=0.2,type="l",lwd=0.4,las=1,col="blue",ylim=c(0,max(data[,8])))

#Tracé de la moyenne (ou médiane)
tri<-order(data[,6]) #Tri selon le mois
tableau_trie<-data.frame(data[,2][tri],data[,6][tri],data[,7][tri],data[,8][tri])
tri2<-order(tableau_trie[,3]) #Tri selon l'année
tableau_trie2<-data.frame(tableau_trie[,1][tri2],tableau_trie[,2][tri2],tableau_trie[,3][tri2],tableau_trie[,4][tri2])
resultat_all_stations<-aggregate(tableau_trie2[,4],list(tableau_trie2[,2],tableau_trie2[,3]), median) #Calcul chronologique de la médiane pour toutes les stations
par(new = T)
plot(resultat_all_stations[,3],xlab="",ylab="",pch=16,cex=0.2,type="l",lwd=4,las=1,col="black",ylim=c(0,max(data[,8])))

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Re: Changement des étiquettes d'axe

Messagepar Logez Maxime » 10 Juil 2018, 09:38

Bonjour,

Deux possibilités soient avec les fonctions graphiques de base soit avec ggplot2.
Les deux font appel à des logiques différentes. Dans le cas des fonctions de base tu peux faire une boucle par exemple, mais le plus simple je pense c'est d'obtenir un format de données en 'largeur', avec pour chaque Station une colonne de Valeurs pour pouvoir utiliser les fonctions matplot ou matlines.
Pour ggplot2 c'est l'inverse, il faut conserver le format 'long".
# Version classique

Code : Tout sélectionner

y <- reshape(data, v.names = "Valeur", idvar = c("Année", "Mois"), timevar = "Station", direction = "wide")
matplot(1:24, y[grep("Valeur", colnames(y))], type = "l", col = c("red", "blue"), axes = FALSE, xlab = "Mois", ylab = "Valeur")
axis(2)
par(las = 3)
axis(1, at = 1:24, label = ifelse(y$Mois == 12, y$Année, y$Mois))
box()

# Version ggplot2

Code : Tout sélectionner

require(ggplot2)
data$Time <- with(data, sprintf("%s_%02d", Année, Mois))
nms<- unique(data$time)
labs <- ifelse(substr(labs, 6,7)=="12", substr(labs,1,4), substr(labs, 6,7))
names(labs) <- nms
ggplot(data, aes(Time, Valeur, color = Station, group = Station)) +
  geom_path() + geom_point() + xlab("Mois") +
  scale_x_discrete("Mois", labels = labs) +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5))
Cordialement,
Maxime

Pierre Dutrieux
Messages : 2
Enregistré le : 07 Juil 2018, 14:04

Re: Changement des étiquettes d'axe

Messagepar Pierre Dutrieux » 11 Juil 2018, 23:42

Bonjour Maxime,
Je te remercie pour toutes ces indications.
Etant novice sur R, j'ai essayé (en vain) d'adapter tes commandes à mon script. Pour la méthode ggplot2, bcp de message d'erreur, j'ai passé des heures à chercher leur signification, comme:

> data$Time <- with(data, sprintf("%s_%02d", data$ANNEE, data$MOIS))
Error in eval(substitute(expr), data, enclos = parent.frame()) :
argument 'envir' incorrect de type 'closure'

> nms<- unique(data$Time)
Error in data$Time : objet de type 'closure' non indiçable
> labs <- ifelse(substr(labs, 6,7)=="12", substr(labs,1,4), substr(labs, 6,7))
Error in as.character(x) :
cannot coerce type 'closure' to vector of type 'character'


Et donc la suite ne fonctionne pas à cause de ces erreurs.
Idem pour la méthode "reshape".
Pourrais-tu stp m'indiquer brièvement ce que fait chaque ligne ?
Merci !


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité