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

Calcul scientifique Python Discussion :

[Matplotlib] Incompatibilité Pmw et Matplotlib


Sujet :

Calcul scientifique Python

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3
    Par défaut [Matplotlib] Incompatibilité Pmw et Matplotlib
    Bonjour,

    Devant générer des diagrammes circulaires avec Python 2.5, je me suis tourné vers Matplotlib, qui exauce parfaitement mes voeux (fonction pie()). Le problème: la mise en page utilise Pmw (ScrolledFrame() en particulier), et là, ça déraille...

    Le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    #!/usr/bin/env python
    # -*- coding: iso-8859-1 -*-
     
    import Image, ImageTk, ImageDraw
    import Tkinter, tkFileDialog
    import Pmw
    import matplotlib.pylab as plt
     
    class Traitement(Tkinter.Tk):
     
        def __init__(self,parent):
            Tkinter.Tk.__init__(self,parent)
            self.parent = parent
            self.geometry("700x500")
            self.frameSaisie = Pmw.ScrolledFrame(self,usehullsize=1,hull_width=1000,
                                           hull_height=600,
                                           borderframe=1,
                                           borderframe_borderwidth=1)
            self.frameSaisie.configure(vscrollmode='static',hscrollmode='none')
            self.frameSaisie.grid(row=0, column=0, rowspan=2)
            self.trait = [0.0,23,45,12,11,9]
            self.graph = DiagCirculaire(titre='T45', trait=self.trait, parent=self.frameSaisie.interior())
            self.graph.grid(row=0,column=0)
     
    class DiagCirculaire(Tkinter.Canvas):
        "Dessine les camembert pour les traits ecologique"
     
        def __init__(self,titre,trait,parent):
            Tkinter.Canvas.__init__(self,parent,height=200,width=200)
            self.titre = titre
            self.parent = parent
            self.donnee = trait
            self.initialize()
     
        def initialize(self):
            plt.figure(1, figsize=(2,2))
            ax = plt.axes([0.1, 0.1, 0.8, 0.8])
     
            explode=(0, 0.05, 0,0,0,0)
            plt.pie(self.donnee, shadow=True)
     
            plt.savefig(self.titre+'.png')
     
            self.image = Image.open(self.titre+'.png')
            self.image = ImageTk.PhotoImage(self.image)
            self.create_image(100,100, image = self.image)
     
    if __name__ == "__main__":
        app = Traitement(None)
        app.title('Graphe2')
        app.configure(bg = "#ffffff")
        app.mainloop()
    et l'erreur obtenue:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Traceback (most recent call last):
      File "diag_circu.py", line 49, in <module>
        app = Traitement(None)
      File "diag_circu.py", line 18, in __init__
        borderframe_borderwidth=1)
      File "/usr/lib/python2.5/site-packages/Pmw/Pmw_1_3/lib/PmwScrolledFrame.py", line 115, in __init__
        self._horizScrollbar.set(0.0, 1.0)
      File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 2802, in set
        self.tk.call((self._w, 'set') + args)
    _tkinter.TclError: expected floating-point number but got "0.0"
    J'ai essayé de changer la méthode d'import (import pylab, import pylab as plt...) sans succés. Dans les doc et sur Google, je n'ai rien trouvé qui s'approche de ce problème.

    Les versions: Matplotlib 0.91.2, Pmw 1.3.2-3

    Quelqu'un a t il une explication? Encore mieux, une solution? Ou une piste pour créer des diagrammes circulaires autrement?

    Merci

    Goz

    Ubuntu 8.04

  2. #2
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Par défaut
    Ton problème n'a rien à voir du tout avec Matplotlib... C'est dans le constructeur de ta classe Pmv qu'il y a un souci. A ce moment, il n'y a rien du tout de MAtplotlib dans ton code.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3
    Par défaut
    Bonsoir,

    Je me suis orienté vers un problème avec Matplotlib car si je remplace le diagramme circulaire par un diagramme à barre fait "à la main" dans un canvas Tkinter, donc sans import de Matplotlib, tout marche.

    Je me disais que l'un ou l'autre de ces modules utilisait peut être des variables globales, ce qui expliquerait cette interférence (je ne sais plus où j'ai lu ça...).

    Je me repencherais sur le problème demain (dur, dur d'être constructif après un journée bien chargée!), merci de ton attention.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3
    Par défaut
    Finalement j'ai résolu mon problème en faisant les diagrammes circulaires "à la main" dans un canvas Tkinter (je ne sais pas pourquoi ça me semblait difficile...). Je posterais le code quand ce serat au point (sauf si c'est inutile ?)

    Bonne soirée

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Zope] Matplotlib
    Par ark42 dans le forum Zope
    Réponses: 4
    Dernier message: 31/05/2008, 19h30
  2. [matplotlib] installation depuis les sources
    Par guiph dans le forum Déploiement/Installation
    Réponses: 3
    Dernier message: 10/05/2006, 14h05
  3. [matplotlib] 3D
    Par Makino dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 05/04/2006, 16h36
  4. wxPython + MatPlotLib + py2exe
    Par bibile dans le forum Py2exe
    Réponses: 1
    Dernier message: 05/08/2005, 22h49
  5. Probleme python 2.4 et matplotlib : unicode encode error
    Par patfrat dans le forum Calcul scientifique
    Réponses: 1
    Dernier message: 12/06/2005, 00h30

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