Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Membre à l'essai
    Homme Profil pro mAtT
    Ingénieur d'étude en Bioinformatique - Recherche publique dans l'agronomie
    Inscrit en
    avril 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Nom : Homme mAtT
    Âge : 25
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'étude en Bioinformatique - Recherche publique dans l'agronomie
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : avril 2010
    Messages : 138
    Points : 22
    Points
    22

    Par défaut Perl/Tk, GD::Graph et zoom sur une image

    Bonjour.

    J'aurais besoin de conseils concernant une application que je développe en Perl/Tk.

    Mon application sert à extraire des données de fichiers texte, puis d'extraire des données X et Y d'intérêt (sélectionnées par l'utilisateur via des JComboBox).

    J'affiche alors l'évolution de Y en fonction de X (Y = f(X)) et un autre graphique à l'autre du module GD::Graph (GD::Graph::Lines et GD::Graph::points).

    Pour cela je stocke toutes mes valeurs de X dans un tableau, celles de Y dans un autre respectivement.
    Je stocke également les valeurs calculées en X et en Y pour une autre méthode.

    Mon problème est le suivant :

    La personne qui m'a proposé ce projet souhaiterait pouvoir zoomer sur une zone des graphiques.

    J'ai donc pour cela créé un bouton permettant de modifier les graphiques. Une fois cliqué, une nouvelle fenêtre s'ouvre, proposant des scalebars pour modifier les valeurs de Xmin, Xmax, Ymin et Ymax.
    Une fois sélectionnées, mon programme récupère les valeurs sélectionnées, parcourt les tableaux de X et de Y respectivement, récupère la valeur Xmin la plus proche de celle sélectionnée par l'utilisateur (strictement inférieure ou égale). La même chose pour Xmax mais la valeur dans le tableau qui lui est strictement supérieure ou égale. Et même chose pour les valeurs Ymin et Ymax.
    Ensuite je fais une extraction des valeurs situées entre Xmin,Xmax et Ymin,Ymax dans mes tableaux contenant mes X et mes Y, pour récupérer les valeurs qui correspondent à la fenêtre que l'utilisateur veut afficher.

    Lorsque je modifie uniquement mes valeurs en X, les valeurs en Y sont calculées automatiquement par le module GD::Graph. Mais le problème survient lorsque j'essaie de modifier les valeurs en Y.

    En fait le problème est que GD::Graph a besoin d'un tableau de valeurs de X et d'un tableau de valeurs de Y ayant la même taille (chaque X ayant sa valeur Y). Mais si Xmax-Xmin est différent de Ymax-Ymin, cela coince ...

    Donc comment zoomer sur un graphique généré par GD::Graph ?
    (Je ne vois pas quelle partie de code je peux vous fournir pour illustrer mon problème mais dites-moi ce qui peut vous être utile pour me répondre).

    J'ai essayé Tk::Chart mais j'ai vraiment été déçu par la fonction de zoom qui n'est pas du tout un zoom tout compte fait, seulement une modification de l'affichage.

    Merci beaucoup de votre aide

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    15 891
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 15 891
    Points : 483 779
    Points
    483 779

    Par défaut

    Ta notion de zoom n'est pas claire.
    GD::Graph attend un même nombre de valeurs x et y afin de pouvoir positionner correctement chaque point.
    Il en est de même pour Tk::Chart.
    L'utilisation de GD::Graph dans Tk veut dire générer une image puis l'afficher dans Tk. Pour ce que tu souhaites faire, tu perds en qualité et performance, et autant utiliser Tk::Chart qui le fait déjà car l'image est construite à l'intérieur de Tk sans oublier les interactions possibles avec ton image .

    Quelque soit le module que tu utilises, tu n'auras pas de zoom à l'intérieur de l'image, ce qui n'a de toute façon pas de sens pour une image de ce type (Line, point...).
    Par contre, le zoom de TK::Chart peut te permettre de mieux représenter tes données si tu as beaucoup de lignes ou de points, il te permet de changer l'échelle de ton image verticalement, horizontalement ou les deux de façon simple et rapide.
    Donc zommer une image statistique revient à modifier l'échelle du graphique.
    Zommer une image photo revient à cibler l'intérieur de l'image, comme les yeux dans un portrait (mais ça n'a strictement aucun sens dans un graph de point).

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !

  3. #3
    Membre à l'essai
    Homme Profil pro mAtT
    Ingénieur d'étude en Bioinformatique - Recherche publique dans l'agronomie
    Inscrit en
    avril 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Nom : Homme mAtT
    Âge : 25
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'étude en Bioinformatique - Recherche publique dans l'agronomie
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : avril 2010
    Messages : 138
    Points : 22
    Points
    22

    Par défaut

    Bonjour.

    En fait dans la première version de mon application, je n'avais laissé la possibilité à l'utilisateur que de modifier les valeurs Xmin et Xmax, car l'échelle pour afficher les valeurs Y s'adapte automatiquement avec GD::Graph.
    Cependant cela pose problème quand dans des valeurs Y consécutives il y a une valeur beaucoup plus élevée que les autres par exemple, et qui fausse donc l'affichage.

    Il faut donc que l'utilisateur puisse "zoomer" sur la zone du graphique qui l'intéresse pour s'affranchir des valeurs extrêmes.

    Quand j'ai testé Tk::Chart, j'ai juste vu la possibilité de faire un clic droit puis de choisir un type de modification d'échelle (100%, 50%, 200% etc). Mais au niveau du rendu, c'est très peu précis et pas vraiment adapté à mon cas, non ?

    Je n'ai peut-être pas bien testé Tk::Chart ...

    Sinon je pensais à rogner l'image créée par GD::Graph en calculant en terme de pixels la fenêtre du graphique à conserver et à afficher pour faire un zoom.

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    avril 2004
    Messages
    15 891
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : avril 2004
    Messages : 15 891
    Points : 483 779
    Points
    483 779

    Par défaut

    Si tu t'amuses à chercher à rogner, tu ne vas pas t’en sortir car c'est assez compliqué et demande trop de bidouilles pour un résultat très moyen.

    De toute façon, l'affichage d'un graph statistique est toujours délicat car l'interprétation est dépendant de ce que l'on voit. En fonction des valeurs Y, on peut dire n'importe quoi. Regarde cet exemple de la documentation de Tk::Chart.
    Pour les même valeurs, on a trois affichages justes mais à l'interprétation, on peut très vite se tromper . L'option -interval permet donc de palier à ce genre de soucis. Donc, j'estime qu'il est dangereux de donner la possibilité à l'utilisateur de modifier les valeurs Y.

    Pas de questions technique par messagerie privée (lisez les règles du forum Perl) et pour les nouveaux !

  5. #5
    Membre à l'essai
    Homme Profil pro mAtT
    Ingénieur d'étude en Bioinformatique - Recherche publique dans l'agronomie
    Inscrit en
    avril 2010
    Messages
    138
    Détails du profil
    Informations personnelles :
    Nom : Homme mAtT
    Âge : 25
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'étude en Bioinformatique - Recherche publique dans l'agronomie
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : avril 2010
    Messages : 138
    Points : 22
    Points
    22

    Par défaut

    D'accord je vais essayer de m'en sortir avec Tk::Chart alors.

    C'est la personne qui m'a demandé de faire ce projet qui m'a demandé d'offrir la possibilité à l'utilisateur de modifier les valeurs Ymin et Ymax pour pouvoir afficher les zones du graphique qui l'intéressent (valeurs extrêmes rendant moins visibles d'autres valeurs plus représentées).

    Si après on peut obtenir le même type de résultat dans modifier Ymin et Ymax, tant mieux alors.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •