486 votes

Parcelles Matplotlib: suppression des axes, légendes et espaces blancs

Je connais Python et Matplotlib, je voudrais simplement appliquer une palette de couleurs à une image et écrire l'image résultante, sans utiliser d'axes, d'étiquettes, de titres ou quoi que ce soit habituellement ajouté automatiquement par matplotlib. Voici ce que j'ai fait:

 def make_image(inputname,outputname):
    data = mpimg.imread(inputname)[:,:,0]
    fig = plt.imshow(data)
    fig.set_cmap('hot')
    fig.axes.get_xaxis().set_visible(False)
    fig.axes.get_yaxis().set_visible(False)
    plt.savefig(outputname)
 

Il supprime avec succès l'axe de la figure, mais la figure enregistrée présente un remplissage blanc et un cadre autour de l'image réelle. Comment puis-je les supprimer (au moins le rembourrage blanc)? Merci

633voto

Hooked Points 16345

Je pense que la commande axis('off') prend soin de l'un des problèmes de façon plus succincte que de changer chaque axe et de la frontière séparément. Il laisse toujours l'espace blanc autour de la frontière. L'ajout d' bbox_inches='tight' de la savefig commande près de vous, vous pouvez le voir dans l'exemple ci-dessous que le blanc, l'espace est beaucoup plus petite, mais toujours présents.

from numpy import random
import matplotlib.pyplot as plt

data = random.random((5,5))
fig = plt.imshow(data,interpolation='nearest')
fig.set_cmap('hot')
plt.axis('off')
plt.savefig("test.png",bbox_inches='tight')

enter image description here

192voto

unutbu Points 222216

J'ai appris cette astuce de matehat, ici :

 import matplotlib.pyplot as plt
import numpy as np

def make_image(inputname,outputname):
    # data = mpimg.imread(inputname)[:,:,0]
    data = np.arange(1,10).reshape((3, 3))
    fig = plt.figure()
    fig.set_size_inches(1, 1)
    ax = plt.Axes(fig, [0., 0., 1., 1.])
    ax.set_axis_off()
    fig.add_axes(ax)
    plt.set_cmap('hot')
    ax.imshow(data, aspect = 'normal')
    plt.savefig(outputname, dpi = 80)

make_image(None,'/tmp/out.png')
 

les rendements

entrez la description de l'image ici

89voto

DomagojHack Points 324

Solution la plus simple possible:

J'ai simplement combiné la méthode décrite dans la question et la méthode tirée de la réponse de Hooked.

 fig = plt.imshow(my_data)
plt.axis('off')
fig.axes.get_xaxis().set_visible(False)
fig.axes.get_yaxis().set_visible(False)
plt.savefig('pict.png', bbox_inches='tight', pad_inches = 0)
 

Après ce code, il n’ya plus d’espace ni de cadre.

Pas d'espaces blancs, axes ou cadre

9voto

Vous pouvez également spécifier l'étendue du chiffre à l'argument bbox_inches . Cela éliminerait le rembourrage blanc autour de la figure.

 def make_image(inputname,outputname):
    data = mpimg.imread(inputname)[:,:,0]
    fig = plt.imshow(data)
    fig.set_cmap('hot')
    ax = fig.gca()
    ax.set_axis_off()
    ax.autoscale(False)
    extent = ax.get_window_extent().transformed(plt.gcf().dpi_scale_trans.inverted())
    plt.savefig(outputname, bbox_inches=extent)
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X