J'ai un tableau (n, m) que j'ai visualisé avec matplotlib.pyplot.imshow
. Je voudrais enregistrer ces données dans un certain type de fichier graphique raster (par exemple un png) afin que:
imshow
interpolation='nearest'
dans imshow
.)Comment puis-je faire ceci?
J'ai vu du code qui peut le faire en utilisant interpolation='nearest'
et forcer matplotlib à désactiver (à contrecœur) les axes, les espaces blancs, etc. Cependant, il doit y avoir un moyen de le faire plus directement - peut-être avec PIL? Après tout, j'ai les données sous-jacentes. Si je peux obtenir une valeur RVB pour chaque élément du tableau sous-jacent, je peux l'enregistrer avec PIL. Existe-t-il un moyen d'extraire les données RVB de imshow
? Je peux écrire mon propre code pour mapper les valeurs du tableau aux valeurs RVB, mais je ne veux pas réinventer la roue, car cette fonctionnalité existe déjà dans matplotlib.
Comme vous l'avez déjà deviné, il n'est pas nécessaire de créer une figure. Vous avez essentiellement besoin de trois étapes. Normalisez vos données, appliquez la palette de couleurs, enregistrez l'image. matplotlib fournit toutes les fonctionnalités nécessaires:
import numpy as np
import matplotlib.pyplot as plt
# some data (512x512)
import scipy.misc
data = scipy.misc.lena()
# a colormap and a normalization instance
cmap = plt.cm.jet
norm = plt.Normalize(vmin=data.min(), vmax=data.max())
# map the normalized data to colors
# image is now RGBA (512x512x4)
image = cmap(norm(data))
# save the image
plt.imsave('test.png', image)
Bien que le code ci-dessus explique les étapes simples, vous pouvez également laisser imsave
effectuer les trois étapes (similaire à imshow
):
plt.imsave('test.png', data, cmap=cmap)
Résultat (test.png):