为什么imshow无法正确显示充满矩阵的矩阵?

时间:2020-02-19 03:58:47

标签: python matplotlib imshow

这是一个简单的可复制代码:

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 个答案:

答案 0 :(得分:1)

明确使用imshowvminvmax参数:

使用标量数据并且没有明确的 norm 时, vmin vmax 定义了颜色图所覆盖的数据范围。默认情况下,颜色图覆盖所提供数据的完整值范围。如果使用 norm 参数,则会忽略 vmin vmax

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
----------------------------------------