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] et insertion de valeurs


Sujet :

Calcul scientifique Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Par défaut [Matplotlib] et insertion de valeurs
    Bonjour,

    J'utilise matplotlib pour tracer un graphique avec des données qui proviennent d'une base SQL. Ces données varient suivant le nombre de lignes dans ma table et suivant les lignes.
    J'ai récupéré ces valeurs sous la forme d'une chaîne de caractère qui donne ceci par exemple : [1,2,3]

    matplotlib reçoit les valeurs de cette manière :
    plt.plot([1,2,3],[2,4,5],'r')

    si je pose des variables de type string X=[1,2,3] et Y=[2,4,5]
    et que j'insère de cette manière plt.plot(X,Y,'r')
    je reçois alors le message d'erreurs :

    /Exception in Tkinter callback
    Traceback (most recent call last):
    File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 1403, in __call__
    return self.func(*args)
    File "/local/jmabilai/G4C/G3C_graph_6.py", line 394, in tracer
    plt.plot(Xc,Ypc,'g')
    File "/usr/lib/python2.5/site-packages/matplotlib/pyplot.py", line 1952, in plot
    ret = gca().plot(*args, **kwargs)
    File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 3013, in plot
    for line in self._get_lines(*args, **kwargs):
    File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 431, in _grab_next_args
    for seg in self._plot_3_args(remaining, **kwargs):
    File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 371, in _plot_3_args
    x, y, multicol = self._xy_from_xy(x, y)
    File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 259, in _xy_from_xy
    nrx, ncx = x.shape
    ValueError: need more than 0 values to unpack
    j'ai éssayé avec des variables X=['1','2','3'] et Y=['2','4','5']
    avec cette façon X=(int,X) et Y=(int,Y)
    mais j'obiens encore un autre message d'erreur :
    line in self._get_lines(*args, **kwargs):
    File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 436, in _grab_next_args
    for seg in self._plot_3_args(remaining[:3], **kwargs):
    File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 371, in _plot_3_args
    x, y, multicol = self._xy_from_xy(x, y)
    File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 259, in _xy_from_xy
    nrx, ncx = x.shape
    ValueError: need more than 0 values to unpack
    Quelqu'un a une idée pour que matplotlib reconnaisse les nombres de ma chaîne comme des int?

  2. #2
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    salut, je connais pas matplotlib mais au vu de cette erreur
    nrx, ncx = x.shape
    ValueError: need more than 0 values to unpack
    Ne manque-t'il pas un paramètre qui serait un tuple ou une liste ayant pour éléments respectivement le nombre de ligne et le nombre de colonne du tableau ?
    Car apparament x.shape ici retourne un tuple ou une liste vide...

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Par défaut
    Je viens de me rendre compte que j'ai copié un mauvais message d'erreur pour le second en fait ça donne ceci :

    (<type 'int'>, "[1,'2','3']")
    (<type 'int'>, "['6','11','3']") # Ici j'ai fais des prints pour voir la forme des variables après avoir fait X=(int,X) et Y=(int,Y)
    Exception in Tkinter callback
    Traceback (most recent call last):
    File "/usr/lib/python2.5/lib-tk/Tkinter.py", line 1403, in __call__
    return self.func(*args)
    File "/local/jmabilai/G4C/G3C_graph_6.py", line 394, in tracer
    plt.plot(Xint,Ypci,'g')
    File "/usr/lib/python2.5/site-packages/matplotlib/pyplot.py", line 1952, in plot
    ret = gca().plot(*args, **kwargs)
    File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 3014, in plot
    self.add_line(line)
    File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 1254, in add_line
    self._update_line_limits(line)
    File "/usr/lib/python2.5/site-packages/matplotlib/axes.py", line 1261, in _update_line_limits
    xydata = line.get_xydata()
    File "/usr/lib/python2.5/site-packages/matplotlib/lines.py", line 559, in get_xydata
    self.recache()
    File "/usr/lib/python2.5/site-packages/matplotlib/lines.py", line 383, in recache
    x = ma.asarray(self.convert_xunits(self._xorig), float)
    File "/usr/lib/python2.5/site-packages/numpy/ma/core.py", line 3938, in asarray
    return masked_array(a, dtype=dtype, copy=False, keep_mask=True, subok=False)
    File "/usr/lib/python2.5/site-packages/numpy/ma/core.py", line 1253, in __new__
    _data = np.array(data, dtype=dtype, copy=copy, subok=True, ndmin=ndmin)
    ValueError: setting an array element with a sequence.
    Je n'arrive pas à lui transmettre les valeurs, et je ne peux pas convertir la suite de nombre à cause des virgules.

  4. #4
    Membre émérite
    Homme Profil pro
    heu...
    Inscrit en
    Octobre 2007
    Messages
    648
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : heu...

    Informations forums :
    Inscription : Octobre 2007
    Messages : 648
    Par défaut
    Hmmmm... "(int , ['1','2','3'])" retourne un tuple contenant la classe int et une liste de caractères.

    Je n'ai pas vraiment compris ton but, mais si c'est de transformer cette liste de caractères en liste d'integers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> a=['1','2','3']
    >>> a=[int(x) for x in a]
    >>> a
    [1, 2, 3]
    Si je suis à côté de la plaque, ben... désolé , ne connaissant ni numpy, ni matplotlib, je ne saurais plus t'aider...

  5. #5
    Candidat au Club
    Inscrit en
    Décembre 2008
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 3
    Par défaut
    Pourrais tu etre un peu plus précis sur ton code?

    les cas tests que tu exposes fonctionnent chez moi...

    les valeurs de len(X) et len(Y) doivent être égales...

    plus généralement, il est plus approprié d'utiliser des arrays numpy avec matplotlib....
    des listes std sont converties facilement avec la méthode array
    array_X_numpy = numpy.array(X)

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 3
    Par défaut
    J'ai réussi à obtenir se que je voulais, en fait oui je voulais transformer une chaîne ressemblant à [1,2,3] en une chaîne dont les integers seraient les nombres et le reste de la chaîne resterait de type string mais c'est impossible comme ça.

    J'ai utilisé un peu la même solution que celle que tu proposes N.tox, en créant un tableau avec ces valeurs, mais le tuple que me retournait SQL je ne l'ai pas convertit en string (oui parce que je le découpait avec awk par la suite) en fait j'apprends python alors j'ai fais des trucs un peu bizarre avec du bash, du awk dans mon script python ^^"

    mais ça marche aussi bien en faisant comme ceci:

    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
    self.curseur.execute("select s.nbpass, s.nbfail from statistiques s,tests t where t.dateF BETWEEN '%s"%date_begin+"' AND '%s"%date_end+"' AND t.codetest=s.codetest")
                    courbe_stat_list=self.curseur.fetchall()
                    #print courbe_stat_list
                    Pass=[]
                    Fail=[]
                    for lines in courbe_stat_list:
                            Pass.append(lines[0])
                            Fail.append(lines[1])
                    X=range(0,nbr_test)
                    if self.tnbpass.get()==1 and self.tnbfail.get()==1:
                            plt.plot(X,Pass,'g',X,Fail,'r')
                            plt.ylabel('nombre de tests')
                            plt.show()
                    else:
                            if self.tnbpass.get()==1:
                                    plt.plot(X,Pass,'g')
                                    plt.ylabel('nombre de tests')
                                    plt.show()
                            if self.tnbfail.get()==1:
                                    plt.plot(X,Fail,'r')
                                    plt.ylabel('nombre de tests')
                                    plt.show()
                    self.curseur.close()
                    connexion.close()
    Merci pour votre aide.

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

Discussions similaires

  1. [LDAP] Problème lors d'insertion de valeur vide
    Par navis84 dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 26/04/2006, 14h26
  2. [vb6-Excel] insertion de valeurs excel => vb
    Par ostro dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 27/10/2005, 15h21
  3. [MSDE][INSERT Auto]Valeur négative de PK
    Par papouAlain dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/09/2005, 14h28
  4. [JDBC]Probleme d'insertion des valeurs !!
    Par tarik75 dans le forum JDBC
    Réponses: 6
    Dernier message: 27/07/2005, 12h41
  5. INSERT avec valeur connue et résultat d'un SELECT...
    Par snoop dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 27/04/2005, 08h54

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