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

Interfaces Graphiques Perl Discussion :

Perl/Tk, GD::Graph et zoom sur une image


Sujet :

Interfaces Graphiques Perl

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur bioinformaticien
    Inscrit en
    Avril 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur bioinformaticien
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 139
    Points : 49
    Points
    49
    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
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    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).

  3. #3
    Membre du Club
    Homme Profil pro
    Ingénieur bioinformaticien
    Inscrit en
    Avril 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur bioinformaticien
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 139
    Points : 49
    Points
    49
    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
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    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.

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur bioinformaticien
    Inscrit en
    Avril 2010
    Messages
    139
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur bioinformaticien
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 139
    Points : 49
    Points
    49
    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.

Discussions similaires

  1. Avoir un zoom sur une image
    Par JamesP dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 26/03/2007, 15h46
  2. Zoom sur une image
    Par mariemor64 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 26/05/2006, 20h47
  3. Zoom sur une image
    Par flo456 dans le forum Général JavaScript
    Réponses: 35
    Dernier message: 19/05/2006, 07h48
  4. [débutant] zoom sur une image
    Par Anthony17 dans le forum Delphi
    Réponses: 1
    Dernier message: 16/05/2006, 22h09
  5. Zoom sur une image
    Par AurelBUD dans le forum C++Builder
    Réponses: 5
    Dernier message: 07/05/2004, 17h05

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