Подтвердить что ты не робот

Как "отключить" размытый эффект imshow() в matplotlib?

Я хочу сделать цветовой график вероятностей, однако imshow генерирует размытые значения для точек, которые имеют нулевую вероятность. Как я могу избавиться от этой размытой периферии вокруг реальных точек сетки?

Пример:

import numpy as np
import matplotlib.pyplot as plt

a=np.asarray([[  0.00000000e+00 , 1.05824446e-01 ,  2.05086136e-04,   0.00000000e+00],
[  1.05824446e-01 ,  3.15012305e-01  , 1.31255127e-01  , 1.05209188e-01],
 [  2.05086136e-04  , 1.31255127e-01 ,  0.00000000e+00 ,  0.00000000e+00],
 [  0.00000000e+00   ,1.05209188e-01  , 0.00000000e+00  , 0.00000000e+00]])
im=plt.imshow(a,extent=[0,4,0,4],origin='lower',alpha=1,aspect='auto')
plt.show()

enter image description here

4b9b3361

Ответ 1

По умолчанию (который изменен mpl 2.0) imshow интерполирует данные (как вы хотели бы сделать для изображения). Все, что вам нужно сделать, это сказать, что это не интерполировать:

im = plt.imshow(..., interpolation='none')

'nearest' также будет работать для вас. См. сглаживание между пикселями imagesc\imshow в matlab, например matplotlib imshow, для примеров всех видов интерполяции.

doc

Ответ 2

Вы также можете использовать:

im = plt.imshow(..., interpolation='nearest')

Это особенно хорошо работает для дискретных переменных.