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 :

matplotlib: enregistrer une figure en plein écran


Sujet :

Python

  1. #1
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut matplotlib: enregistrer une figure en plein écran
    Bonjour,

    Je cherche à enregistrer une figure matplotlib exactement comme le ferait le bouton "save as", mais avec une instruction python.
    En l'occurence, je veux mettre la figure en plein écran, l'enregistrer en .png, et avoir le même résultat qu'avec le bouton "save as".

    J'ai trouvé pas mal de stackoverflow sur le sujet, mais aucune des solutions proposées n'a l'air de fonctionner :
    * plt.get_current_fig_manager().window.showMaximized() - je n'ai pas testé les autres backend - met la figure en plein écran pour un show(), mais l'enregistrement via fig.savefig(fileName, format = "png") donne le même png que sans plein écran.
    * fig.savefig(..., dpi= 1200) ne résoud rien non plus, même en jouant sur la valeur de dpi.
    * Sous mac, fig.tight_layout() donne le bon aspect ratio sur mon axe principal, mais fait disparaitre une légende située (à la main) à l'extérieur de l'axe.

    Avez-vous une autre solution ?
    A défaut, savez-vous quel est le callback appelé par le bouton "save as" pour les différents backend, histoire que je puisse appeler le même code et avoir la garantie que mon png a le bon aspect ?

    Merci d'avance.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    dpi c'est le nombre de pixel par "inch", le modifier rendra l'image plus précise ou plus floue.
    Les dimensions d'une figure sont retournées par (figure).get_size_inches() et modifiables via (figure).set_size_inches(...).
    Exemple pour 'doubler' la taille:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import numpy as np
    import matplotlib.pyplot as plt
     
    x = np.arange(0, 2*np.pi, 0.1)
    y = np.sin(x)
     
    plt.plot(x, y)
     
    f = plt.gcf()
    dpi = f.get_dpi()
    h, w = f.get_size_inches()
    f.set_size_inches(h*2, w*2)
    f.savefig("test.png")
    Pour que çà corresponde aux dimensions de votre "plein écran", une règle de 3... devrait le faire.

    Citation Envoyé par shaiHulud Voir le message
    J'ai trouvé pas mal de stackoverflow sur le sujet, mais aucune des solutions proposées n'a l'air de fonctionner :
    Les solutions aux problèmes courants sont généralement dans les FAQ et les cookbook. pour ce qui est d'ajuster la taille des figures c'est ici

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

  3. #3
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Salut Wiztricks, et merci !

    Ca répond à mes problèmes, mais il y a deux détails un peu flou:

    1)
    pour que çà corresponde aux dimensions de votre "plein écran", une règle de 3... devrait le faire.
    J'ai donc besoin de connaitre la taille de mon écran (en inch et non en pixel).
    Pour cela, je n'ai pas trouvé mieux que créer une figure vide, mettre son fig_manager en fullscreen, show cette figure en mode interactif (pour pouvoir get_size_inches() après qu'elle ait été show, ce qui modifie la size).
    Y'avait-il plus simple ?

    2) Quand je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    plt.gcf().set_size_inches((5,20))
    plt.draw()
    plt.show()
    Je ne vois pas la figure avec la taille que je lui demande. Il faut que je modifie aussi le manager. Pourquoi ?

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par shaiHulud;8796273
    2) Quand je fais
    [CODE
    plt.gcf().set_size_inches((5,20))
    plt.draw()
    plt.show()
    [/CODE]
    Je ne vois pas la figure avec la taille que je lui demande. Il faut que je modifie aussi le manager. Pourquoi ?
    Je ne sais pas: votre code est incomplet...
    Si je modifie l'exemple précédent:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import numpy as np
    import matplotlib.pyplot as plt
     
    x = np.arange(0, 2*np.pi, 0.1)
    y = np.sin(x)
     
    plt.plot(x, y)
     
    f = plt.gcf()
    dpi = f.get_dpi()
    h, w = f.get_size_inches()
    f.set_size_inches(h*2, w*2)
    plt.show()
    affiche bien une image 2X sur mon écran.

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

  5. #5
    Membre éprouvé
    Inscrit en
    Août 2010
    Messages
    1 124
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 1 124
    Points : 1 277
    Points
    1 277
    Par défaut
    Le dernier code que tu as posté donne sur mon écran un graphe de la même taille.
    Par contre, ca marche avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    f.set_size_inches(h*2, w*2, forward=True)
    Je vais regarder ce keyword, mais je suspecte l'utilisation d'un backend dédié à MacOS X par défaut.

    Encore merci !

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

Discussions similaires

  1. ouverture d'une page en plein écran
    Par Adren dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 13/07/2006, 09h08
  2. Ouvrir une popup en plein écran avec une barre de menu.
    Par magic8392 dans le forum Général JavaScript
    Réponses: 21
    Dernier message: 12/10/2005, 10h43
  3. Comment ouvrir une fenêtre en plein écran ?
    Par magic8392 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 11/10/2005, 12h05
  4. ouvrir une page en plein écran et fermer la page restante
    Par stephcache dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/10/2005, 02h29
  5. [GNU Pascal] Lancer une application en plein écran
    Par joleboss dans le forum Autres IDE
    Réponses: 13
    Dernier message: 20/05/2004, 12h57

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