IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Graphe et echelle X en temps - dateheure [WD17]


Sujet :

WinDev

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 202
    Points : 79
    Points
    79
    Par défaut
    Bonjour,

    J'ai un fichier contenant plusieurs enregistrements :

    - la 1ere rubrique est au format DateHeure
    - la 2ème rubrique est une valeur entière qui est une mesure.

    Pour info, mon fichier ne se remplit pas régulièrement dans le temps mais selon des événements; les enregistrements de ma rubrique DateHeure ne sont pas donc espacés d'une même durée.

    Mon soucis :

    - quand je veux afficher un graphe de mon fichier, mon échelle de temps (Abscisse) garde toujours le même espacement entre 2 mesures alors qu'en réalité les durées sont variables donc l'espacement ne devrait pas être toujours le même.

    Comment faire pour que mon graphe respecte en abscisse la vrai valeur DateHeure de mon fichier et ne se contente pas d'afficher les points les uns à la suite des autres avec un espacement constant ?

    Merci par avance de vos aides.

    Pour compléter, dans le paramétrage du Graphe:

    - Onglet Séries : j'ai bien associé à la source des étiquettes de la catégorie la rubrique DateHeure de mon fichier

    - Onglet Général : j'ai bien coché Echelle des abscisses espacée dans le temps

    Je ne comprends pas pourquoi l'écart reste le même quelque soit la valeur de ma DateHeure...

    Je creuse.

    J'ai crée une rubrique de type Heure dans mon fichier.

    Depuis l'onglet Séries, en pointant ma source des étiquettes de catégorie sur ma nouvelle rubrique de type Heure, CA MARCHE, l'écart entre les temps est bien respecté !

    Le problème, c'est que je ne peux afficher que des courbes qui vont de 00:00:00 à 23:59:59 !

    Apparemment, le type DateHeure n'est pas reconnu par le graphe !

    Est ce un bug ? ou ca vient de moi ?

  2. #2
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Tu devrais regarder du côté du graphe nuage de point (tu peux faire relier les points et obtenir une courbe)

    grNuageAjouteDonnéeXY(<Nom du graphe> , <Numéro de la série> [, <Indice>] , <ValeurX> , <ValeurY>)
    alors que
    grAjouteDonnée(<Nom du graphe> , <Numéro de la série> [, <Indice>] , <Valeur>)

    Dans un nuage de point, les points sont positionnés selon des valeur x,y alors que les graphes classique c'est selon indice,y
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  3. #3
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    Une suggestion : tout convertir en secondes.

    Pour la date :
    un entier (jours) à multiplier par 84.600 pour passer des jours aux secondes

    JourEnSecondes = DateVersEntier(MonDateHeure..Date) * 84600
    (il faut encore gérer l'origine du graphe)
    ou
    JourEnSecondes = DateDifférence(MonDateHeureOrigine..Date, MonDateHeure..Date) * 84600


    Pour l'heure :
    un entier (centièmes de secondes) à diviser par 100 pour revenir aux secondes

    HeureEnSecondes = HeureVersEntier(MonDateHeure..Heure)/100


    Puis additionner les deux valeurs :
    MonAbcsisse = JourEnSecondes + HeureEnSecondes

    Tout cela dans une petite procédure.

    Hemgé

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 202
    Points : 79
    Points
    79
    Par défaut
    Merci à tous.

    Hemgé, pour ta méthode, peux tu me confirmer que c'est pour utiliser le graphe Nuage de point ?

  5. #5
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonsoir

    Courbe ou nuage de points, juste une manière de fournir l'abscisse en contournant la difficulté rencontrée avec les DateHeure.

    Au passage, il n'est pas indispensable de créer une rubrique de type Heure dans le fichier : la rubrique de type DateHeure prend 8 octets tout comme le type Date ou le type Heure.
    Donc une rubrique DateHeure occupe 8 octets au lieu de 8 + 8 = 16 octets si on définit une rubrique Date et une rubrique Heure.
    Il suffit ensuite de jouer avec les propriétés ..Date et ..Heure.

    Bon travail

    Hemgé

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 202
    Points : 79
    Points
    79
    Par défaut
    Merci Hemgé.

    Cependant, je confirme qu'en mode courbe, les espaces ne sont respectés sur les abscisses que pour une donnée de type heure pas pour un type entier (ou alors je n'ai pas compris comment mettre en oeuvre un graphe et merci dans ce cas de m'aider).

    En mode nuage de points, la solution DateVersEntier et HeureVersEntier est sympa.
    Par contre, sur mon axe des abscisses, je me retrouve donc avec un entier en graduation.

    Existe t-il un moyen ou je pourrais faire la fonction inverse (EntierVersDate et EntierVersHeure) pour l'appliquer à l'affichage des graduations de mon axe des abscisses ?

    Merci par avance.

  7. #7
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Citation Envoyé par davcaz Voir le message
    Existe t-il un moyen ou je pourrais faire la fonction inverse (EntierVersDate et EntierVersHeure) pour l'appliquer à l'affichage des graduations de mon axe des abscisses ?
    Regarde dans l'aide les fonctions EntierVersDate() et EntierVersHeure(), les bien nommés, existent...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 202
    Points : 79
    Points
    79
    Par défaut
    Citation Envoyé par laurent30s Voir le message
    Regarde dans l'aide les fonctions EntierVersDate() et EntierVersHeure(), les bien nommés, existent...
    Merci, mais ce n'est pas l'objet de ma question.

    Mon graphe a pour l'axe abscisse des graduations de type entier.

    Au lieu d'afficher ces graduations en entier, comment faire pour afficher ces graduations en DateHeure grace aux fonctions EntierVersDate et EntierVersHeure ?

  9. #9
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Citation Envoyé par davcaz Voir le message
    Mon graphe a pour l'axe abscisse des graduations de type entier.

    Au lieu d'afficher ces graduations en entier, comment faire pour afficher ces graduations en DateHeure grace aux fonctions EntierVersDate et EntierVersHeure ?
    L'aide sur les graphes nuage : http://doc.pcsoft.fr/fr-FR/?les_grap...e_nuage_points

    dont extrait ci-dessous

    8. Graduation.
    Par défaut, la graduation est calculée automatiquement. L'onglet "Général" de la description du champ permet de :
    . définir une graduation spécifique.
    . définir une échelle des abscisses en fonction du temps. Cette option fonctionne uniquement avec des données de type Date ou DateHeure provenant d'un champ table ou d'une rubrique HyperFileSQL. Cette option ne peut pas être utilisée avec une série remplie par programmation.
    . définir une échelle des ordonnées logarithmique.
    . indiquer l'orientation des graduations.
    Bon point : Tu peux avoir une échelle des abscisses en fonction du temps (Date ou DateHeure)
    Dans la descrition générale du graphe sur l'axe des X il y a un interrupteur "Echelle des abscisses espacée en fonction du temps"

    Mauvais point : Cette option ne peut pas être utilisée avec une série remplie par programmation
    Le mieux ce sera de remplir une table en dehors de l'écran et de s'en servir comme source de données

    Je ne me suis jamais servi de cette fonctionnalité, mais tu as peut-être une chance d'arriver à obtenir ce que tu veux...

    bon courage...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

  10. #10
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour

    Tout d'abord, je crois qu'il y a une confusion : vous voulez afficher non pas l'étiquette des graduations mais celle des données, celle des catégories.

    Comme le signale laurent30s, il faut choisir l'option qui permet de définir une échelle espacée en fonction du temps. Cela devrait fonctionner puisque vous alimentez votre graphe à partir de votre fichier.

    Ensuite, vous devriez voir la fonction grEtiquetteCatégorie.

    Mais je ne suis pas certain que vous aurez une courbe continue.
    Voir l'option dessin des valeurs nulles dans la description du graphe.

    Bonne chance et bon week-end

    Hemgé

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 202
    Points : 79
    Points
    79
    Par défaut
    J'éprouve vraiment de la difficulté...

    . définir une échelle des abscisses en fonction du temps. Cette option fonctionne uniquement avec des données de type Date ou DateHeure provenant d'un champ table ou d'une rubrique HyperFileSQL. Cette option ne peut pas être utilisée avec une série remplie par programmation.

    C'est incroyable, j'ai un fichier contenant une colonne avec un type DateHeure.

    Et je pointe bien ma source des étiquettes des catégories sur la colonne de type DateHeure et je coche bien 'Echelle des abscisses espacées en fonction du temps et ca ne marche pas...

    Ci joint une image de ce que j'obtiens; l'axe des temps contient bien les dateheure du fichier mais à aucun moment l'espace de temps n'est respecté (les ecarts sur l'axe des X est le même quelque soit la valeur de ma DateHeure).

    Merci par avance si je n'ai pas compris quelque chose, je deviens fou ou c'est un bug Windev ?


  12. #12
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Bonjour,

    J'ai fait une petit recherche et il y a une discussion intéressante parce qu'elle montre 3 codes, mais qui n'aboutit pas. Donc, impasse pour vous.

    Toute réflexion faite, vous souhaitez afficher non pas une série régulière en fonction du temps, mais deux séries irrégulières de données reliées.

    D'après l'aide, dans une courbe ,
    les données sont interprétées comme des ordonnées successives de points.
    Successives et sous-entendu régulières, ce qui n'est pas votre situation.

    D'après l'aide toujours, le nuage de points est ce qu'il vous faut :
    Un nuage de points (XY) représente la relation entre deux valeurs numériques dans deux séries de données. Les séries impaires permettent d'identifier les abscisses des points, et les séries paires, les ordonnées des mêmes points. Les nuages de points mettent en évidence des intervalles irréguliers, ils permettent aussi de grouper les données.

    Les graphes "nuage de points" sont couramment utilisés pour représenter des données scientifiques.
    grNuageAjouteDonnéeXY vous permettrait de définir les points par programmation, mais doit être évité dans le cas d'une échelle des abscisses définie en fonction du temps (cft l'aide et le post #9 de laurent30s )

    Il faut donc continuer à alimenter via votre fichier, puis définir les étiquettes avec grNuageEtiquetteSérie, qui vous permettra de définir les deux étiquettes (X et Y)

    Si cela ne fonctionne pas, il faudra nous montrer votre code.

    En espérant que vous pourrez indiquer [Résolu] !

    Bon travail

    Hemgé

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 202
    Points : 79
    Points
    79
    Par défaut
    Alors...

    - j'utilise donc un graphe type Nuage de Points
    - je remplis mon graphe par programmation
    - j'utilise la fonction grNuageAjouteDonneesXY
    - dans mon X je mets un entier =AAMMJJHHMMSS (date+heure)
    - dans mes Y je mets mes valeurs mesurées
    - j'utilise grOrigine pour caler mon axe X de la valeur de mon premier entier qui correspond à ma première date à mon dernier entier... (exemple de 130527130000 à 130527133000 pour afficher l'évolution des données pour ce jour de 13h à 13h30).

    Bilan...
    - les écarts de temps sur l'axe des X sont bien respectés et le graphe ressemble à quelque chose puisque le codage entier sur l'axe des X permet de deviner la date.

    Problèmes...
    - si j'utilise le zoom, des que je touche l'ascensceur associé, il me remet l'axe des X de 0 à 130527133000 et ma courbe devient inexploitable (mes données sont représentées part un trait vertical sur la droite du graphe).

    Comment faire pour que le zoom reste dans la zone définie par grOrigine et ne reparte pas de 0 ?

    Merci par avance si vous pouvez répondre à cette question...

  14. #14
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Sauf erreur, on a déjà répondu à cette question ici.

    Donc, dans votre cas, vous devez jouer avec ..BorneMin et cela devrait fonctionner.

    Vous devriez essayer grNuageEtiquetteSérie qui vous permettra d'afficher la date et/ou l'heure (DateVersChaine & HeureVersChaine) à partir de votre rubrique DateHeure. Pas la peine de repasser par l'entier.

    Hemgé

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 202
    Points : 79
    Points
    79
    Par défaut
    Merci Hemgé mais d'après votre réponse, je pense que je n'ai pas encore compris comment manipuler un champ Graphe...

    Pour le zoom, je coche dans la définition du graphe Onglet Détail la case Autoriser le zoom horizontal.
    Aussi, je ne vois pas sur quoi je pourrais appliquer la propriété ..BorneMin ? L'exemple est donné pour un ascenseur indépendant du graphe. Cela ne correspond pas à mon problème.

    Concernant les date et heure, je n'ai pas compris comment utiliser la fonction grNuageEtiquetteSérie(<Nom du graphe> , <Numéro de la série> , <Étiquette>) ?
    Comment avec cette fonction puis je utiliser mes données de type DateHeure et les fonctions DateVersChaine & HeureVersChaine ?

    Désolé si cela vous parait simple mais vraiment je seche...

  16. #16
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Si vous allez voir la discussion renseignée plus haut, la 'méthode 3' qui concerne le nuage de points, vous devriez pouvoir adapter le code.

    Ensuite, au lieu du grEtiquetteCatégorie qui est mis en commentaire, vous utilisez grNuageEtiquetteSérie, sachant que les séries impaires correspondent aux abscisses et que le texte de l'étiquette se passe sous forme de variable chaîne ou alors en dur entre guillemets.

    sEtiquette = DateVersChaine(RubriqueDateHeure..Date) + " - " + HeureVersChaine(RubriqueDateHeure..Heure)
    Spécifier le format de la date et de l'heure si différent(s) du format Système.

    grNuageEtiquetteSérie("MonGraphe", nIndice*2 -1, sEtiquette)

    Sans oublier grDessine

    Hemgé

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 202
    Points : 79
    Points
    79
    Par défaut
    Merci Hemgé.

    La fonction grNuageEtiquetteSérie() fonctionne.
    Cela permet quand je survole la courbe lorsque je suis sur un point d'afficher la date du point.

    Cependant, cela n'a aucun effet sur les graduations de mon axe des X.

    J'aimerai afficher la Date et l'Heure sur mon échelle des X.

    Pour info, j'ai essayé la fonction grEtiquetteCatégorie() mais elle ne semble marcher que pour les graphes Courbes et non Nuage de Points.

    Comment faire, merci par avance de vos aides.

  18. #18
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Désolé, mais je n'ai pas d'autres suggestions.

  19. #19
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    202
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 202
    Points : 79
    Points
    79
    Par défaut
    Merci Hemgé.

    Nous avons donc déterminer une limite pour l'objet Graphe de WinDev17.

    Limite: impossible de tracer des courbes (non 'carrées') avec pour abscisses des types date-heure qui ne sont pas forcement à intervalle régulier.

    Peut être que ce post arrivera jusqu'à PC Soft...

  20. #20
    Membre chevronné Avatar de laurent30s
    Homme Profil pro
    Inscrit en
    Novembre 2007
    Messages
    881
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 881
    Points : 1 771
    Points
    1 771
    Par défaut
    Citation Envoyé par davcaz Voir le message
    Merci Hemgé.

    Nous avons donc déterminer une limite pour l'objet Graphe de WinDev17.

    Limite: impossible de tracer des courbes (non 'carrées') avec pour abscisses des types date-heure qui ne sont pas forcement à intervalle régulier.

    Peut être que ce post arrivera jusqu'à PC Soft...
    Après réflexion, Je pense que l'usage prévu pour ce cas par pcsoft est un graphe courbe avec échelle des abscisses espacée en fonction du temps.

    Quand on l'utilise avec des dates ou des heures, ça marche très bien. Par contre avec des DateHeure ça ne marche pas alors que dans l'aide c'est spécifier marcher.

    En début de semaine j'ai fait une signalisation au support technique avec une petite démo. J'attends leur réponse... Je vous en ferai part le cas échéant...
    Bon dev
    Laurent

    - C’est génial.
    - Non c’est bizarre.
    - Justement quand c’est simple y’a des milliers de réponses et quand c’est bizarre y’en a aucune.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Teechart générer l'echelle X des temps
    Par aladin95 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 28/04/2014, 12h19
  2. Graph avec echelle de date automatique
    Par fancho dans le forum Excel
    Réponses: 2
    Dernier message: 16/06/2009, 13h56
  3. Réponses: 0
    Dernier message: 22/09/2008, 11h49
  4. [JFreeChart] Graphe qui avance dans le temps
    Par Premium dans le forum 2D
    Réponses: 1
    Dernier message: 18/05/2007, 15h37
  5. [VB6] Graph sur echelle log ?
    Par belfaigore dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 18/09/2006, 07h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo