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 :

Exporter dataframe en .png (matplotlib)


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2018
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2018
    Messages : 180
    Par défaut Exporter dataframe en .png (matplotlib)
    Bonjour à tous,

    Travaillant sur Matplotlib depuis peu, j'aimerais exporter un dataframe en png pour pouvoir l’implémenter dans un rapport PDF avec la librairie reportlab.

    Après quelques recherches, j'ai réussi à exporter un dataframe en .html avec une visibilité très correcte, mais impossible pour autant de l'importer dans ce format dans reportlab. J'ai donc cherché un moyen de convertir un .html en .png avec la librairie imgkit, mais une erreur m'empêche d’exécuter le programme.

    Voici mon code, qui exporter un group by en html, mais qui bug dès qu'il faut convertir le résultat en .png avec "imgkit.from_file('filename.html', 'out.jpg')"

    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
     
    import matplotlib.pyplot as plt
    import pandas as pd
    from pandas.plotting import table 
    from subprocess import call
    import seaborn as sns
    import imgkit
    import numpy as np
     
    df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'], 'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'], 'C': np.random.randn(8),'D': np.random.randn(8)})
    a_exporter = df.groupby('A').sum()
     
     
    a_exporter.to_html('table.html')
    imgkit.from_file('filename.html', 'out.jpg')
    Je rencontre une erreur visiblement courante sur internet. Voici un extrait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Information■: impossible de trouver des fichiers pour le(s) mod■le(s) sp■cifi■(s).
    Information■: impossible de trouver des fichiers pour le(s) mod■le(s) sp■cifi■(s).
    Traceback (most recent call last):
      File "C:\Users\Kevin\AppData\Local\Programs\Python\Python38\lib\site-packages\imgkit\config.py", line 30, in __init__
        with open(self.wkhtmltoimage):
    FileNotFoundError: [Errno 2] No such file or directory: b''
    If this file exists please check that this process can read it. Otherwise please install wkhtmltopdf - http://wkhtmltopdf.org
    edit : J'ai installé wkhtmltopdf, mais l'erreur est la même.

    Existe t-il une alternative ?

    Merci.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Il sera sans doute plus simple de faire un tableau avec reportlab (au final vous voulez un PDF) à partir d'un dataframe pandas (et chercher un peu sur Internet s'il y a des qui ont déjà fait çà pour s'en inspirer).

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

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2018
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2018
    Messages : 180
    Par défaut
    Merci pour votre réponse.
    Effectivement, je me suis penché sur cette solution. Sauf erreur de ma part, le rendu n'était pas terrible. C'était la raison pour laquelle je suis passé par la conversion du dataframe en html.

    En reprenant la génération du dataframe de tout à l'heure, et en le convertissant au format Table, j'arrive à ce résultat :

    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
     
    import numpy as np
    import pandas as pd
     
    #IMPORTER UN STYLE DANS LE PDF. avec simpledoc..., le graphique sera automatiquement centré
    from reportlab.platypus import SimpleDocTemplate
    from reportlab.lib.pagesizes import letter
     
    #POUR POUVOIR CREER DES OBJETS TABLEAU
    from reportlab.platypus import Table
     
    #------CREATION DU GRAPHIQUE-------
    df = pd.DataFrame({'A': ['foo', 'bar', 'foo', 'bar','foo', 'bar', 'foo', 'foo'], 'B': ['one', 'one', 'two', 'three', 'two', 'two', 'one', 'three'], 'C': np.random.randn(8),'D': np.random.randn(8)})
    data = df.groupby('A').sum()
     
    print(data)
    filename = 'dataframe.pdf'
     
    pdf = SimpleDocTemplate(filename, pagesize = letter)
     
    #ON VA CREER UN OBJET TABLEAU
    #lista = [data.columns[:,].values.astype(str).tolist()] + data.values.tolist() #FORMULE QU'ON EST 'OBLIGE' D'UTILISER POUR CONVERTIR UN DATAFRAME EN TABLEAU
    lista = [data.columns[:,].values.astype(str).tolist()] + data.values.tolist()
    table = Table(lista)
     
    #ON VA AJOUTER LA TABLE AU PDF, ET CONSTRUIRE LE PDF
    elems = []
    elems.append(table)
     
    pdf.build(elems)
    J'obtiens ce résultat sur un pdf ... https://zupimages.net/viewer.php?id=20/10/t22g.png

    .... pas terrible, d'autant plus qu'il manque le titre des axes à droites.

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Citation Envoyé par preliator Voir le message
    .... pas terrible, d'autant plus qu'il manque le titre des axes à droites.
    S'ils ne sont pas dans lista...

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

  5. #5
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2018
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Alimentation

    Informations forums :
    Inscription : Juin 2018
    Messages : 180
    Par défaut Problème conversion dataframe à tableau (matplotlib et reportlab)
    Pardon ?

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Citation Envoyé par preliator Voir le message
    Est-il possible d'améliorer un peu le rendu en affichant par exemple les bordures de chacune des cases ?
    Oui c'est possible: ouvrez la documentation de reportlab. Le chapitre 7 vous montre ce qu'on peut faire avec Table et des TableStyle.

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

Discussions similaires

  1. Problème Export dataframe en fichier Excel
    Par yo_mounette dans le forum R
    Réponses: 2
    Dernier message: 19/09/2019, 11h19
  2. Export Figure en PNG avec transparence
    Par Phidyos dans le forum Images
    Réponses: 2
    Dernier message: 10/03/2015, 13h59
  3. Réponses: 0
    Dernier message: 12/02/2014, 20h04
  4. umbrello export jpeg ou png image noir
    Par pcouas dans le forum UML
    Réponses: 0
    Dernier message: 16/09/2013, 12h35
  5. Réponses: 5
    Dernier message: 12/11/2011, 15h46

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