Comment créer une image pylab.savefig () pour la fenêtre ‘maximisée’ au lieu de la taille par défaut

J’utilise pylab dans matplotlib pour créer un tracé et enregistrer le tracé dans un fichier image. Cependant, lorsque je sauvegarde l’image à l’aide de pylab.savefig( image_name ) , je trouve que l’image SIZE enregistrée est identique à celle affichée lorsque j’utilise pylab.show() .

En l’occurrence, j’ai beaucoup de données dans le tracé et lorsque j’utilise pylab.show() , je dois maximiser la fenêtre avant de pouvoir voir tout le tracé correctement, et les tickers xlabel ne se superposent pas à chaque autre.

Y a-t-il un moyen de maximiser la fenêtre avant d’enregistrer l’image dans un fichier? – pour le moment, je ne reçois que l’image de la taille de la fenêtre par défaut, ce qui entraîne la superposition des étiquettes de l’axe des x.

Vous définissez la taille lors de l’initialisation:

 fig2 = matplotlib.pyplot.figure(figsize=(8.0, 5.0)) # in inches! 

Modifier :

Si le problème est lié aux tics sur l’axe des x, vous pouvez les définir “manuellement”:

 fig2.add_subplot(111).set_xticks(arange(1,3,0.5)) # You can actually compute the interval You need - and substitute here 

Et ainsi de suite avec d’autres aspects de votre plot. Vous pouvez tout configurer. Voici un exemple:

 from numpy import arange import matplotlib # import matplotlib as mpl import matplotlib.pyplot # import matplotlib.pyplot as plt x1 = [1,2,3] y1 = [4,5,6] x2 = [1,2,3] y2 = [5,5,5] # initialization fig2 = matplotlib.pyplot.figure(figsize=(8.0, 5.0)) # The size of the figure is specified as (width, height) in inches # lines: l1 = fig2.add_subplot(111).plot(x1,y1, label=r"Text $formula$", "r-", lw=2) l2 = fig2.add_subplot(111).plot(x2,y2, label=r"$legend2$" ,"g--", lw=3) fig2.add_subplot(111).legend((l1,l2), loc=0) # axes: fig2.add_subplot(111).grid(True) fig2.add_subplot(111).set_xticks(arange(1,3,0.5)) fig2.add_subplot(111).axis(xmin=3, xmax=6) # there're also ymin, ymax fig2.add_subplot(111).axis([0,4,3,6]) # all! fig2.add_subplot(111).set_xlim([0,4]) fig2.add_subplot(111).set_ylim([3,6]) # labels: fig2.add_subplot(111).set_xlabel(r"x $2^2$", fontsize=15, color = "r") fig2.add_subplot(111).set_ylabel(r"y $2^2$") fig2.add_subplot(111).set_title(r"title $6^4$") fig2.add_subplot(111).text(2, 5.5, r"an equation: $E=mc^2$", fontsize=15, color = "y") fig2.add_subplot(111).text(3, 2, unicode('f\374r', 'latin-1')) # saving: fig2.savefig("fig2.png") 

Alors, que voulez-vous exactement configurer?

Il existe deux options principales dans le matplotlib (pylab) pour contrôler la taille de l’image:

  1. Vous pouvez définir la taille de l’image résultante en pouces
  2. Vous pouvez définir le DPI (points par pouce) pour le fichier de sortie (en gros, c’est une résolution)

Normalement, vous aimeriez faire les deux, car vous aurez ainsi le contrôle total de la taille de l’image en pixels . Par exemple, si vous souhaitez afficher une image au format 800×600 exactement, vous pouvez utiliser DPI = 100 et définir une taille de 8 x 6 pouces:

 import matplotlib.pyplot as plt # plot whatever you need... # now, before saving to file: figure = plt.gcf() # get current figure figure.set_size_inches(8, 6) # when saving, specify the DPI plt.savefig("myplot.png", dpi = 100) 

On peut utiliser n’importe quel DPI. En fait, vous pourriez vouloir jouer avec différentes valeurs de DPI et de taille pour obtenir le résultat que vous aimez le plus. Attention cependant, utiliser très peu de DPI n’est pas une bonne idée, car matplotlib peut ne pas trouver une bonne police pour rendre une légende ou un autre texte. Par exemple, vous ne pouvez pas définir le DPI = 1, car il n’y a pas de fonts avec des caractères rendus avec 1 pixel 🙂

D’après d’autres commentaires, j’ai compris qu’un autre problème concerne le rendu correct du texte. Pour cela, vous pouvez également modifier la taille de la police. Par exemple, vous pouvez utiliser 6 pixels par caractère, au lieu de 12 pixels par caractère utilisé par défaut (ce qui rend le texte deux fois plus petit).

 import matplotlib #... matplotlib.rc('font', size=6) 

Enfin, quelques références à la documentation d’origine: http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.savefig , http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot .gcf , http://matplotlib.sourceforge.net/api/figure_api.html#matplotlib.figure.Figure.set_size_inches , http://matplotlib.sourceforge.net/users/customizing.html#dynamic-rc-settings

PS Désolé, je n’ai pas utilisé pylab, mais pour autant que je sache, tout le code ci-dessus fonctionnera de la même manière dans pylab – remplacez simplement plt dans mon code par le pylab (ou le nom que vous avez atsortingbué lors de l’importation de pylab). Même chose pour le matplotlib – utilisez plutôt le pylab .

Je pense que vous devez spécifier une résolution différente lorsque vous enregistrez la figure dans un fichier:

 fig = matplotlib.pyplot.figure() # generate your plot fig.savefig("myfig.png",dpi=600) 

La spécification d’une grande valeur de résolution devrait avoir un effet similaire à la maximisation de la fenêtre de l’interface graphique.

Vérifiez ceci: Comment agrandir une fenêtre plt.show () en utilisant Python

La commande est différente selon le backend que vous utilisez. Je trouve que c’est le meilleur moyen de s’assurer que les images enregistrées ont la même mise à l’échelle que ce que je vois sur mon écran.

Depuis que j’utilise Canopy avec le backend QT:

 pylab.get_current_fig_manager().window.showMaximized() 

J’appelle ensuite savefig () selon les besoins avec une réponse PPP accrue par silvado.

Si je comprends bien ce que vous voulez faire, vous pouvez créer votre silhouette et définir la taille de la fenêtre. Ensuite, vous pouvez enregistrer votre graphique avec le bouton de la boîte à outils matplotlib. Voici un exemple:

 from pylab import get_current_fig_manager,show,plt,imshow plt.Figure() thismanager = get_current_fig_manager() thismanager.window.wm_geometry("500x500+0+0") #in this case 500 is the size (in pixel) of the figure window. In your case you want to maximise to the size of your screen or whatever imshow(your_data) show()