L'enregistrement d'un imshow comme l'image tout en préservant la résolution
J'ai une (n, m) tableau que j'ai été visualisation matplotlib.pyplot.imshow
. J'aimerais enregistrer ces données dans un certain type de raster fichier graphique (par exemple un png) de sorte que:
- Les couleurs sont celles illustrées avec
imshow
- Chaque élément de la sous-matrice est exactement un pixel dans l'image enregistrée, ce qui signifie que si le sous-jacent de la matrice est (n, m) des éléments, l'image est NxM pixels. (Je ne suis pas intéressé à
interpolation='nearest'
dansimshow
.) - Il n'y a rien dans l'image enregistrée, sauf pour les pixels correspondant aux données du tableau. (I. e. il n'y a pas d'espace blanc autour des bords, axes, etc.)
Comment puis-je faire cela?
J'ai vu un peu de code qui permet de le faire en utilisant interpolation='nearest'
et forçant matplotlib (à contrecœur) désactiver les axes, d'espaces, 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 de la sous-tableau, alors je peux l'enregistrer avec PIL. Est-il un moyen d'extraire les données RVB de imshow
? Je peux écrire mon propre code pour mapper les valeurs de tableau pour les valeurs RVB, mais je ne veux pas réinventer la roue, car cette fonctionnalité existe déjà dans matplotlib.
OriginalL'auteur lnmaurer | 2015-07-21
Vous devez vous connecter pour publier un commentaire.
Comme vous l'avez déjà deviné, il n'est pas nécessaire de créer une figure. En gros, vous avez besoin de trois étapes. Normaliser vos données, appliquer la palette de couleurs, de sauvegarder l'image. matplotlib fournit toutes les fonctionnalités nécessaires:
Alors que le code ci-dessus explique les étapes, vous pouvez également laisser
imsave
faire les trois étapes (similaire àimshow
):Résultat (test.png):
LogNorm
en place deNormalize
, etimshow
peut prendre une normalisation de la fonction en tant qu'argument alors queimsave
ne peut apparemment pas. Cependant, votre explication me permettra de contourner cette limitation.OriginalL'auteur hitzg