Combiner diagramme en barres et plusieurs courbes

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 Vanhooydonck
Messages : 4
Enregistré le : 04 Jan 2017, 13:35

Combiner diagramme en barres et plusieurs courbes

Messagepar Pierre Vanhooydonck » 03 Fév 2017, 13:53

Bonjour à tous,

J'aimerais tracer sur le même graphe un barplot représentant la pluviométrie et plusieurs courbes (représentant l'humidité du sol à différentes profondeurs). Toutes les données sont journalières. Voilà mes deux data frames :


- Humidité du sol :

Code : Tout sélectionner

head(umidade_data)
        date S_10cm.1.1_pol S_20cm.1.1_pol S_30cm.1.1_pol S_40cm.1.1_pol S_60cm.1.1_pol S_100cm.1.1_pol
1 2014-08-14         0.1383         0.1731         0.2059         0.1880         0.1932          0.3341
2 2014-08-15         0.1439         0.1813         0.2095         0.1915         0.2009          0.3429
3 2014-08-16         0.1481         0.1832         0.2115         0.1943         0.2012          0.3450
4 2014-08-17         0.2731         0.3508         0.3240         0.2584         0.2085          0.3456
5 2014-08-18         0.2700         0.3463         0.3211         0.2623         0.2156          0.3463
6 2014-08-19         0.2661         0.3397         0.3168         0.2607         0.2143          0.3462


- Pluviométrie :

Code : Tout sélectionner

> head(rain_data)
        date rain_data...2.
1 2014-10-03              0
2 2014-10-04              0
3 2014-10-07              0
4 2014-10-08              0
5 2014-10-09              0
6 2014-10-10              0




J'ai essayé avec les fonctions graphiques de base avec un premier barplot suivi des autres courbes superposées, les courbes d'affichent toutes mais les échelles des courbes sont différentes et il est donc impossible de comparer les valeurs :

Code : Tout sélectionner

plot_pluvio <- barplot(height = rain_data$rain_data...2., names.arg = rain_data$date, xlab="Date", ylab="Daily precipitation (mm)", col = "black")


#Plotar Umidade no mesmo grafico
par(new = TRUE)
plot(x = umidade_data$date, y = umidade_data$S_10cm.1.1_pol, xlab = "", ylab = "", type = "l", axes = FALSE, col = "green", lty=1)
par(new = TRUE)
plot(x = umidade_data$date, y = umidade_data$S_20cm.1.1_pol, xlab = "", ylab = "", type = "l", axes = FALSE, col = "blue", lty=1)
par(new = TRUE)
plot(x = umidade_data$date, y = umidade_data$S_30cm.1.1_pol, xlab = "", ylab = "", type = "l", axes = FALSE, col = "red", lty=1)
par(new = TRUE)
plot(x = umidade_data$date, y = umidade_data$S_40cm.1.1_pol, xlab = "", ylab = "", type = "l", axes = FALSE, col = "darkorchid1", lty=1)
par(new = TRUE)
plot(x = umidade_data$date, y = umidade_data$S_60cm.1.1_pol, xlab = "", ylab = "", type = "l", axes = FALSE, col = "darkorange", lty=1)
par(new = TRUE)
plot(x = umidade_data$date, y = umidade_data$S_100cm.1.1_pol, xlab = "", ylab = "", type = "l", axes = FALSE, col = "gold4", lty=1)


Je pense qu'il y a une possibilité avec lattice ou ggplot2 mais je n'arrive pas à les utiliser... Quelqu'un aurait-il une idée ?

Merci d'avance !

Pierre

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

Re: Combiner diagramme en barres et plusieurs courbes

Messagepar Logez Maxime » 03 Fév 2017, 20:48

Bonjour,

sur le principe je n'utiliserais pas barplot parce que cette fonction "ne respecte pas" les x. Pour mettre des barres à un x donné (à une date donnée) j'utiliserais la fonction plot et l'argument type = "h" avec une très large barre. Une fois ça je surimposerai les courbes.

Code : Tout sélectionner

# deux jeux de données fictifs :
tab <- data.frame(date = seq(as.Date("2010-01-01"), as.Date("2010-01-10"), by = "day"))
tab <- cbind(tab, matrix(rnorm(50), 10))
tab2 <- data.frame(date = seq(as.Date("2010-01-04"), as.Date("2010-01-10"), by = "day"), pluvio = rnorm(7, 50, 6))

# pour avoir la même échelle des abcisses :
rgs <- range(c(tab$date, tab2$date))
#possibilité d'agrandir la fenêtre de +1j de chaque côté
#rgs <- rgs+c(-1,1)

par(lend = 1)
# les barres
plot(tab2, type = "h", lwd = 30, xlim = rgs, col = "red")
# les coordonnées du cadre de la fenêtre graphique qui serviront pour positionner correctement les courbes sur l'axe x
usrs <- par()$usr
# pas d'axes des x plus large que le xlim
par(new = TRUE, xaxs = "i")
#trace toutes les courbes en même temps
matplot(tab$date, tab[-1], type = "l", lty = 1, lwd = 1, xlim = usrs[1:2], axes = F, ann = F)
# le deuxième axe des y à droite
axis(4)
Après si toutes tes courbes ne sont pas dans la même unité tu peux utiliser le même genre de manip mais avec une boucle mais si c'est le cas de toutes manières le graph sera difficile à lire avec pas mal d'échelles des y différentes.

Si tu as besoin de plus de place à droite pour le deuxième axe tu peux jouer dans le premier par sur l'argument mar et augmenter la valeur qui correspond à la partie droite de la fenêtre graphique (4ème valeur).

Avec ggplot2 ce n'est pas si simple il faut passer par d'autres librairies voir ici :
http://steffi.ca/thinkR/tutorials/twoplots/
http://drawar.github.io/posts/dual-y-axis-ggplot2/

Cordialement,
Maxime

Pierre Vanhooydonck
Messages : 4
Enregistré le : 04 Jan 2017, 13:35

Re: Combiner diagramme en barres et plusieurs courbes

Messagepar Pierre Vanhooydonck » 06 Fév 2017, 12:37

Merci pour la réponse je vais étudier ça!

Mickael Canouil
Messages : 1315
Enregistré le : 04 Avr 2011, 08:53
Contact :

Re: Combiner diagramme en barres et plusieurs courbes

Messagepar Mickael Canouil » 07 Fév 2017, 09:03

Bonjour,

Le billet sur ce blog pourrait vous intéresser:
https://nsaunders.wordpress.com/2017/02 ... ghcharter/
Mickaël
mickael.canouil.fr | rlille.fr

Pierre Vanhooydonck
Messages : 4
Enregistré le : 04 Jan 2017, 13:35

Re: Combiner diagramme en barres et plusieurs courbes

Messagepar Pierre Vanhooydonck » 10 Fév 2017, 17:17

Merci à tous pour votre aide ! J'aimerais clore le sujet mais je ne trouve pas où faire ça... Quelqu'un peut-il m'aider ?


Retourner vers « Questions en cours »

Qui est en ligne

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