2017-01-10 1 views
0

Cher communauté stackoverflow!La taille du pixel python imshow varie au sein de l'intrigue

J'ai besoin de tracer une carte 2D en python en utilisant imshow. La commande utilisée est

plt.imshow(ux_map, interpolation='none', origin='lower', extent=[lonhg_all.min(), lonhg_all.max(), lathg_all.min(), lathg_all.max()]) 

L'image est alors enregistrée comme suit

plt.savefig('rdv_cr%s_cmlon%s_ux.png' % (2097, cmlon_ref)) 

et ressemble à

image2d_problem

Le problème est que lors d'un zoom dans l'intrigue, on peut remarquer que les pixels ont des formes différentes (par exemple une largeur différente). Ceci est illustré dans la partie zoomée ci-dessous (extrait de la région supérieure du la première image):

enter image description here

Y at-il raison de ce comportement? Je saisis une grille rectangulaire pour mes données, mais le problème n'a rien à voir avec les données elles-mêmes, je suppose. Au lieu de cela, c'est probablement quelque chose lié au rendu. Je m'attendrais à ce que tous les pixels soient de forme égale, mais comme on peut le voir, ils ont des largeurs et des hauteurs différentes. En passant, cela se produit également dans le graphique interactif de matplotlib. Cependant, lorsque vous zoomez dessus, ils deviennent tout à coup tout aussi soudés. Je ne suis pas sûr si https://github.com/matplotlib/matplotlib/issues/3057/ et le lien qui s'y trouve pourrait être lié, mais je peux essayer de jouer avec des valeurs de ppp. Dans tous les cas, si quelqu'un sait pourquoi cela se produit, cette personne pourrait-elle expliquer pourquoi l'ordinateur ne peut pas afficher l'intrigue comme prévu en utilisant les commandes d'en haut?

Merci pour vos réponses!

Répondre

2

Ceci est lié à la façon dont l'image est mappée à l'écran. Pour déterminer la couleur d'un pixel dans l'écran, la couleur correspondante est échantillonnée à partir de l'image. Si la zone de l'écran et la taille de l'image ne correspondent pas, un suréchantillonnage (image trop petite) ou un sous-échantillonnage (image trop grande) se produit.

Vous avez observé un cas de suréchantillonnage. Par exemple, pensez à dessiner une image 4x4 sur une zone de 6x6 pixels sur l'écran. Parfois, deux pixels d'écran tombent dans un pixel d'image, et parfois seulement un. Ici, nous observons un cas extrême de pixels de tailles différentes.

Sampling

Lorsque vous effectuez un zoom dans la vue interactive, cet effet semble disparaitra. C'est parce que soudainement vous mappez l'image à un grand nombre de pixels. Si un pixel d'image est agrandi à, disons, 10 pixels d'écran et un autre à 11, vous remarquerez à peine la différence. L'effet est le plus apparent lorsque l'image correspond presque à la résolution de l'écran. Une solution pour contourner cet effet consiste à utiliser l'interpolation, ce qui peut conduire à un aspect flou indésirable. Pour réduire le flou, vous pouvez ...

  • jouer avec différentes fonctions d'interpolation. Essayez par exemple 'kaiser'

  • ou d'augmenter l'échelle de l'image par un facteur constant en utilisant l'interpolation du plus proche voisin (par exemple remplacer chaque pixel de l'image par un bloc de pixels de la même couleur).Tout flou affectera seulement les bords du bloc.

+0

Qu'en est-il des paramètres ppp? Est-ce que l'enregistrement du fichier en pdf (ou d'autres formats graphiques vectoriels) aide? Je voudrais éviter les algorithmes d'interpolation afin que l'image soit aussi étroitement liée aux données que possible. – bproxauf

+0

Un paramètre élevé de dpi devrait aider, ainsi qu'un format graphique vectoriel. Les deux transfèrent essentiellement le problème de l'affichage "correct" des données dans l'application de visualisation. Personnellement, je préfère les graphiques vectoriels. De cette façon, celui qui regarde les graphiques peut zoomer et dézoomer à leur gré et c'est leur problème si une image ne correspond pas à l'écran 1: 1 :) – kazemakase