GGPLOT axe abscisse format horaire

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

Coralie Deniot
Messages : 20
Enregistré le : 04 Nov 2015, 08:09

GGPLOT axe abscisse format horaire

Messagepar Coralie Deniot » 02 Aoû 2017, 08:02

Bonjour à tous,

Je réalise un graphique sous ggplot2 avec un "taux_croissance ~ Heure". Mon soucis est dans l'affichage des données horaires de l'axe des abscisses. La lecture est illisible car je crois qu'il affiche toutes les minutes ou seconde. Je me retrouve donc avec une grosse barre noire lecture de l'axe des abscisse.

Résultat attendu:
Obtenir un graphique du taux de croissance en fonction du temps horaire. L'axe des abscisses allant de minuit à minuit le lendemain par pas de 30 min (modifiable). je souhaite faire une étude journalière sur l'évolution en 24h quelque soit le nombre de jours d'étude. L'axe des abscisses est donc toujours de 24h.

Problème:
Mauvaise gestion du format heure sous ggplot et lecture illisible de l'axe des abscisses (barre noire par excès d'affichage --> échelle en minute?)

Ce que j'ai réalisé:
Voici le format de mes données actuelles:
J'ai un format de base en format date et heure du type : "%d/%m/%Y %H:%M:%S"
Je créé une nouvelle colonne "heure" pour n'extraire que l'heure en format "%H:%M"
-->Voir le code ci-dessous

Code : Tout sélectionner

date.heure <- c("01/01/2017 8:00:00","01/01/2017 8:10:00","01/01/2017 8:25:00","01/01/2017 8:30:00", "01/01/2017 9:10:00")
heure <- as.POSIXct(date.heure, format = " %H:%M")

Le format n'est pas pris en compte et je me retrouve avec une colonne "heure" identique à "date.heure", et donc sous ggplot mon graphique n'a pas le bon axe des abscisses en format horaire.

Comme le résultat dans ma colonne heure était la même chose que "date.heure", j'ai essayé de transformer le format comme ci-dessous:

Code : Tout sélectionner

heure <- format(heure, "%H:%M")

Là j'obtiens la bonne "lecture" dans ma colonne mais qui n'est pas gérable sous ggplot comme format abscisse.

Mon script ggplot:

Code : Tout sélectionner

library("ggplot2")
 
    g <- ggplot(tab, aes(x=heure, y= tx_croiss))       
    g<- g  + theme(axis.text.x = element_text(angle = 90, size = 5))
       # + scale_x_datetime(format="%H:%M")) --> JAI ESSAYE MAIS LA FONCTION EST INCONNUE
       #g<- g + geom_point(aes(group=paste(Nom), colour = class)) + scale_colour_manual( class = c("red","blue"))  --> QUESTION BONUS
    g<- g + geom_smooth()
    g


Question BONUS
Je profite de cet échange pour vous faire par d'une autre difficulté: Je n'arrive pas à modifier manuellement les couleurs de mes classes. Il doit y avoir une erreur dans mon script sans doute. J'donc une colonne "heure" une "tx_croiss" et une "class" (classification de mon tx_croiss).

Merci à tous pour votre aide sur un nouveau problème !

très bonne journée à vous :)

Coralie

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

Re: GGPLOT axe abscisse format horaire

Messagepar Logez Maxime » 02 Aoû 2017, 08:32

Bonjour,

il te faut aussi charger la librairie scales et jouer avec les paramètres de la fonction scale_x_datetime :

Code : Tout sélectionner

tps <- seq(as.POSIXct("2017-08-01 00:00:00"), as.POSIXct("2017-08-02 00:00:00"), by ="30 min")
tab <- data.frame(tps = tps, cf = runif(49, 1, 2))

ggplot(tab, aes(tps, cf)) + geom_line() +
  scale_x_datetime(date_labels = "%H:%M", date_breaks = "hour") + # pour les options d'affichage
  theme(axis.text.x = element_text(angle = 90, hjust = 1)) # pour la rotation des labels de l'axe des x
Pour ce qui est des couleurs des classes, c'est avec l'argument values et non class que tu devrais y arriver.

Cordialement,
Maxime

Coralie Deniot
Messages : 20
Enregistré le : 04 Nov 2015, 08:09

Re: GGPLOT axe abscisse format horaire

Messagepar Coralie Deniot » 02 Aoû 2017, 09:05

Bonjour Maxime,

Merci pour ton aide. Ta réponse me montre que ma question prête à confusion car le résultat voulu n'est pas celui là.
Je souhaite en effet faire apparaître l'ensemble des taux de croissance en fonction de l'heure.

Par exemple:
Mon étude se réalise du 15 mars 2016 au 20 mars 2016 --> Ainsi il y a 5 jours d'étude.
Je souhaite faire apparaître le taux de croissance moyen de mes données sur 24h. L'axe de mes abscisse est donc toujours de 24h quelque soit le nombre de jours étudiés. Cela nous permet de faire une observation de l'évolution journalière.

Est-ce que cela est plus clair?

Merci pour ton aide !

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

Re: GGPLOT axe abscisse format horaire

Messagepar Logez Maxime » 02 Aoû 2017, 11:24

Il ne te reste qu'a calculer la moyenne horaire et faire le même graph en prenant pour la variable temps n'importe quel jour.

Cordialement,
Maxime

Coralie Deniot
Messages : 20
Enregistré le : 04 Nov 2015, 08:09

Re: GGPLOT axe abscisse format horaire

Messagepar Coralie Deniot » 02 Aoû 2017, 13:31

Merci Maxime,

Mais je ne vois pas ce que tu veux dire par là. Dois-je re-calculer mon taux d’accroissement moyen par heure ?
Que veux tu dire par moyenne horaire avec les données proposées au dessus?

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

Re: GGPLOT axe abscisse format horaire

Messagepar Logez Maxime » 02 Aoû 2017, 13:53

Bonjour,

j'avoue que plus je relis les différents posts et moins je comprends tes objectifs et moins j'ai les idées claires quant à la structure de tes données. Au lieu de donner un exemple bidon, donne nous un extrait de tes données ça sera surement plus parlant.
Je souhaite faire apparaître le taux de croissance moyen de mes données sur 24h.
Certes mais de quoi parle-t-on ? Est-ce que tu as déjà ce taux de croissance moyen ? Sur quel pas de temps a-t-il été calculé ? Est-ce que tu as besoin de le calculer ? etc.

Est-ce que cela est plus clair?
Malheureusement non.

Si je reprends le post initial :
La lecture est illisible car je crois qu'il affiche toutes les minutes ou seconde. Je me retrouve donc avec une grosse barre noire lecture de l'axe des abscisse.
Le problème ici semblait de ne faite afficher que les étiquettes toutes les heures et non pas à tous les points, ce qui semble être différent du message du dernier post.

L'axe des abscisses allant de minuit à minuit le lendemain par pas de 30 min (modifiable).
Ce que semble faire le code du post que j'ai écrit en réponse à ton premier post, en complément du code que tu avais posté.

Si tu as déjà les données et que ce sont les jours qui semblent poser problème (recaler tous les jours sur la même échelle temporelle), alors ce que tu peux faire c'est te créer une colonne qui renferme le numéro du jour (pour par exemple colorer les données par jour), une nouvelle colonne avec la date et tu modifies le numéro du jour de cette dernière colonne en mettant toujours le même jours pour toutes tes données. Ensuite tu fais le ggplot avec le code que je t'ai donné en te servant de la nouvelle colonne de date pour les x et tes taux de croissance en ordonnée.

Cordialement,
Maxime


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Google [Bot] et 1 invité