Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > Interfaces Graphiques
Interfaces Graphiques Forum d'entraide pour les interfaces graphiques en Perl (TK, GTK, Tk-Zinc, 2D et 3D avec OpenGPL, ....). Avant de poster, veuillez consulter la FAQ Perl/Tk , les cours Perl.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 05/03/2012, 14h00   #1
phoenix420
Futur Membre du Club
 
Homme mAtT
Etudiant en Bioinformatique
Inscription : avril 2010
Messages : 132
Détails du profil
Informations personnelles :
Nom : Homme mAtT
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Etudiant en Bioinformatique

Informations forums :
Inscription : avril 2010
Messages : 132
Points : 19
Points : 19
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
phoenix420 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2012, 11h46   #2
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 530
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 530
Points : 31 716
Points : 31 716
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 !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2012, 12h11   #3
phoenix420
Futur Membre du Club
 
Homme mAtT
Etudiant en Bioinformatique
Inscription : avril 2010
Messages : 132
Détails du profil
Informations personnelles :
Nom : Homme mAtT
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Etudiant en Bioinformatique

Informations forums :
Inscription : avril 2010
Messages : 132
Points : 19
Points : 19
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.
phoenix420 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2012, 12h25   #4
djibril
Responsable Perl et Outils

 
Avatar de djibril
 
Homme
Inscription : avril 2004
Messages : 13 530
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 33
Localisation : France

Informations forums :
Inscription : avril 2004
Messages : 13 530
Points : 31 716
Points : 31 716
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 !
djibril est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2012, 13h35   #5
phoenix420
Futur Membre du Club
 
Homme mAtT
Etudiant en Bioinformatique
Inscription : avril 2010
Messages : 132
Détails du profil
Informations personnelles :
Nom : Homme mAtT
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Etudiant en Bioinformatique

Informations forums :
Inscription : avril 2010
Messages : 132
Points : 19
Points : 19
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.
phoenix420 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 20h09.


 
 
 
 
Partenaires

Hébergement Web