Почему imshow не может правильно показать матрицу, полную единиц? - PullRequest
0 голосов
/ 19 февраля 2020

Вот простой воспроизводимый код:

import numpy as np
import matplotlib.pyplot as plt

plt.figure()
img = np.ones((3,3))
plt.imshow(img)
plt.figure()
plt.imshow(np.array([1,1,1,1,0,1,1,1,1]).reshape(3,3))

Это даст вам изображения, как показано ниже:

image of matrix 1

image of matrix 2

Даже если вы используете

plt.imshow(img.astype(float)) or
plt.imshow(img*255)

, это все тот же образ.

Мне просто нужен Matplotlib, чтобы дать мне первое изображение в виде желтого изображения, как и второе изображение.

1 Ответ

1 голос
/ 19 февраля 2020

Явно используйте параметры vmin и vmax imshow:

При использовании скалярных данных и без явных норма , vmin и vmax определяют диапазон данных, который охватывает цветовая карта. По умолчанию цветовая карта охватывает весь диапазон значений предоставленных данных. vmin , vmax игнорируются, если используется параметр norm .

import numpy as np
import matplotlib.pyplot as plt

plt.figure()
img = np.ones((3, 3))
plt.imshow(img, vmin=0, vmax=1)
plt.figure()
plt.imshow(np.array([1, 1, 1, 1, 0, 1, 1, 1, 1]).reshape(3, 3))
plt.show()

Для второго примера диапазон данных [0 ... 1], поэтому по умолчанию цвета масштабируются относительно этого диапазона. Но, для первого примера, желаемый диапазон данных [0 ... 1] не может быть извлечен из самих данных (всех), так что вы должны предоставить эту информацию явно.

Надеюсь, что это поможет!

----------------------------------------
System information
----------------------------------------
Platform:    Windows-10-10.0.16299-SP0
Python:      3.8.1
Matplotlib:  3.2.0rc3
NumPy:       1.18.1
----------------------------------------
...