首页 > 解决方案 > 关于 matplotlib.pyplot.matshow 和 np 矩阵对象的一些相关问题:绘制“None”/“nan”和 x 轴偏移

问题描述

假设我有以下矩阵(作为一个numpy.matrixnp.array对象):

#x/column labels: = -1, 0, 1

#y/row labels: 0, 1, 2 (like normal)

data: np.matrix([[1, 2, 3], [-1, np.nan, -2], [7, -5, -6]])

plt.matshow(data, colorbar = 'RdBu')

plt.colorbar()

plt.show()

我想plt.matshow()在这个矩阵上使用。首先,我不知道为什么,但有时,np.matrix如果我简单地将它们打印出来,我的对象会显示为这样(请忽略数字略有不同):

matrix([[ 1.,  2.,  3.],
    [-1., nan, -2.],
    [-3.,  5.,  2.]])

这些将被np.matshow(). 但是有时它们看起来像这样:

matrix([[1, 2, 3],
    [-1, nan, -2],
    [7, -5, -6]], dtype=object)

第一个问题:

如果dtype=object存在,np.matshow()则不会在存在nanor时绘制它们None。我不知道为什么这个标签有时会出现有时不会出现。np.matrix(a)我通过一个有点复杂的脚本生成这些,我怀疑有时可能是因为我正在做a一些 python 数组或np.array. 这可能是原因吗?我在终端窗口中玩过简单的案例,但无法弄清楚。有时“错误标记”是np.nan,有时是 python 的None.

第二个问题:当np.nan矩阵中有 a 时,将matshow()那个正方形涂成白色。如果使用的颜色图(如默认颜色图)不包括白色,则可以。但是,我想使用“二进制”类型的色标,例如RdBu;蓝色为正,红色为负,0 为白色。有没有办法,例如,将一个大的绿色 X 放在nan's 上,或使其方形黑色等?基本上,这是一种在此颜色图中清楚地区分nan' 和 0 的方法。

第三个问题:请注意在我的第一个代码片段中 x/column 标签应该是-1, 0, 1. 由于该np.matrix对象似乎没有自定义索引,它只是从0. 有没有办法将此信息传递给np.matshow?例如,如果我使用plt.xlim([-1, 1])它,它只显示矩阵的两行,因为在 处没有数据-1,而第三行在 处x = 2

标签: pythonmatplotlibmatrix

解决方案


您可以首先让您的返回一个 numpy 浮点数组,如下所示:

data = np.array(data).astype(np.float)

推荐阅读