Matplotlib 的 matshow 不与网格对齐

5

我有一个6x6的矩阵,它代表着一个网格。在这个网格的一部分,我有一个更小的网格(3x3),如下所示:

In [65]:

arr = np.zeros((6,6))
arr[0:3, 0:3] = 1
arr
Out[65]:
array([[ 1.,  1.,  1.,  0.,  0.,  0.],
       [ 1.,  1.,  1.,  0.,  0.,  0.],
       [ 1.,  1.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.]])

我希望绘制这个图表,但是Matplotlib对其进行了错误对齐,如下所示。红色正方形应该覆盖水平和垂直轴上从0到3的区域。

In [88]:

plt.matshow(arr)
plt.grid()

enter image description here

这个问题怎么解决?谢谢。


你想要修复什么?虚线的对齐吗? - jedwards
@jedwards:是的。红色区域应该从零开始,到3结束。 - luffe
2个回答

9
您可以使用主刻度标签来表示标签,使用次刻度标签来表示网格线。
考虑以下示例:
import matplotlib.pyplot as plt
import numpy as np

arr = np.zeros((6,6))
arr[0:3, 0:3] = 1

plt.matshow(arr)

# This is very hack-ish
plt.gca().set_xticks([x - 0.5 for x in plt.gca().get_xticks()][1:], minor='true')
plt.gca().set_yticks([y - 0.5 for y in plt.gca().get_yticks()][1:], minor='true')
plt.grid(which='minor')

plt.show()

这显示:

输出

诀窍就在这两行代码中:

plt.gca().set_xticks(..., minor='true')
plt.grid(which='minor')

4

如果您愿意,可以使用以下方法:

matshow(arr, extent=[0, 6, 0, 6])

然而,标准行为如预期所示:位于(0,0)处的像素具有元素(0,0)的值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接