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

Python Discussion :

[pandas, plot] : bug complexe


Sujet :

Python

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut [pandas, plot] : bug complexe
    Salut à tous,

    j'ai un bug que je considère comme très complexe mais j'espère que vous allez me contre-dire.

    Voici ce que je fais dans le code si dessous:
    1) je lis des données provenant d'un fichier excel
    2) le classe ceci dans 2 "dataframe" à l'aide de pandas
    3) je sélectionne une valeur pour la variable p afin de tracer les données du dataframe 0 ou 1
    4) je fais un plot 2D des données "fx, fy et fz" sous plusieurs formes
    5) je fais un plot 3D de "fx, fy et fz"

    Voici ce qui ne va pas:
    jusqu'au point 4 pas de problème :
    - je peux tracer les données en 2D de mon dataframe p=0 ou p=1 sans souci
    - par contre, lorsque je veux faire la même chose mais avec le plot 3D alors ça me plante et il me dit que j'essai de tracer quelque chose qui n'est pas un scalaire

    Je ne comprends pas du tout car je trace dans un cas les variables "fx, fy et fz" dans un graph 2D et il reconnait bien tout ceci comme des scalaires et lorsque je fais exactement la même chose mais avec un plot 3D il me dit que ça ne va pas....

    Autre truc étrange : j'ai le problème avec le dataframe (p=1) mais pas avec le premier (p=0) alors que les données sont similaires...

    J'espère que vous pourrez m'aider
    merci

    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
    import sys
    import os
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    #for jupiter
    from IPython import display 
    #for 3D plot
    from mpl_toolkits.mplot3d import Axes3D
    ############# OK ###############
    fpath = './test.xlsx'
    df = pd.read_excel(fpath, sheetname='bilan', skiprows=1,convert_float='False')
    dfLabo=df.iloc[:,0:8]
    columnsInteret=['a','b','c','d','f','g']
    dfLabo_F1=dfLabo.loc[0:9,columnsInteret]
    dfLabo_F2=dfLabo.loc[10:19,columnsInteret]
    dataFramePlot=[dfLabo_F1,dfLabo_F2]
    ############# PLOT 2D: OK ###############
    p=1
    fx = dataFramePlot[p].loc[:,'a']
    fy = dataFramePlot[p].loc[:,'b']
    fz = dataFramePlot[p].loc[:,'f']
    fig = plt.figure("2D")
    ax = fig.add_subplot(111)
    ax.plot(fx, fy,linestyle="None",marker="o")
    ax.plot(fy, fz,linestyle="None",marker="o")
    ax.plot(fx, fz,linestyle="None",marker="o")
    plt.show()
    ############# PLOT 3D: BUG ###############
    fig3D = plt.figure("3D")
    ax3D = fig3D.add_subplot(111, projection='3d')
    ax3D.plot(fx, fy, fz,linestyle="None",marker="o")
    plt.show()
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 709
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 709
    Par défaut
    Salut,

    Votre question se résume à la création de graphes 3D avec matplotlib... et si des tutos existent, c'est parce que la solution n'est pas toujours intuitive.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    Pourrais tu me confirmer que le problème vient bien de mon bout de code en matplotlib stp ?

    j'ai un doute car :
    - j'ai bien suivi les tuto dont tu parles pour faire le code que j'ai affiché (j'ai testé plusieurs versions)
    - mais surtout mon plot 3D fonctionne bien pour la première figure, c'est juste celle où je mets p=1 qui ne fonctionne pas or c'est le même bout de code que dans le cas p=0

    je te remercie d'avance pour ton aide

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Par défaut
    j'ai trouvé une solution mais je suis un peu étonné :
    si j'utilise la fonction "scatter" ça fonctionne mais c'est étonnant car j'ai vu sur le net des exemples où plot était utilisé et ça fonctionnais très bien :
    http://mple.m-artwork.eu/home/posts/...ith3derrorbars

    (c'est d'ailleurs ça que je veux faire : des errorbar en 3D mais j'ai un doute sur la possibilité avec scatter...)

    merci d'avance pour ton aide

    ps: dois je en conclure que "plot" ne fonctionne pas si on met un style de line=none ? et inversement il faut s'attendre à des bug si on utilise scatter avec un autre style de ligne ?

  5. #5
    Membre émérite
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    fx = dataFramePlot[p].loc[:,'a'].values
    fy = dataFramePlot[p].loc[:,'b'].values
    fz = dataFramePlot[p].loc[:,'f'].values

Discussions similaires

  1. Réponses: 4
    Dernier message: 20/08/2016, 07h27

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