Python 在matplotlib中创建正方形网格(面片)

Python 在matplotlib中创建正方形网格(面片),python,matplotlib,Python,Matplotlib,我正在尝试生成一个方格,每个方格之间有一个小的偏移量,我想我会使用我高超的matplotlib技能。不幸的是,输出仅显示一个正方形,因此我怀疑matplotlib没有获得打印我正在初始化的所有修补程序对象的消息,但尽管stackoverflow的拖网太多,我无法解决此问题 import numpy as np import matplotlib.pyplot as plt import matplotlib.patches as patches import matplotlib.collect

我正在尝试生成一个方格,每个方格之间有一个小的偏移量,我想我会使用我高超的matplotlib技能。不幸的是,输出仅显示一个正方形,因此我怀疑matplotlib没有获得打印我正在初始化的所有修补程序对象的消息,但尽管stackoverflow的拖网太多,我无法解决此问题

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import matplotlib.collections as coll

wid = 1
hei = 1
nrows = 5
ncols = 7
inbetween = 0.1

xx = np.arange(0, ncols, (wid+inbetween))
yy = np.arange(0, nrows, (hei+inbetween))

fig = plt.figure()
ax = plt.subplot(111, aspect='equal')

pat = []
for xi in xx:
    for yi in yy:
        sq = patches.Rectangle((xi, yi), wid, hei, fill=True)
        ax.add_patch(sq)

pc = coll.PatchCollection(pat)
ax.add_collection(pc)

plt.axis('off')
plt.show()
plt.savefig('test.png', dpi=90)

关于哪里出了问题有什么想法吗?

这里有两个问题。首先,您在这里只看到(部分)一个面片,因为轴从0到1,而不是ncols和nrows

这可以通过重新指定轴来抵消

ax.relim()
ax.autoscale_view()
或者通过手动设置limis,例如
ax.轴([0,ncols+1,0,nrows+1])

其次,
PatchCollection
没有做任何事情,因为它添加了一个空列表(
pat=[]
)。要么删除这两行

pc = coll.PatchCollection(pat)
ax.add_collection(pc)
或者将
ax.add_patch(sq)
替换为
pat.append(sq)
。请注意,当使用
PatchCollection
并需要手动重新输入轴时,
relim()
不起作用。

愚蠢的错误!我重新限制了轴并添加了
pat.append(sq)
,效果很好(除了我的另一个新手错误,在
plt.show()之前调用
plt.savefig()
。谢谢你快速的回答……现在每个矩形在绘图中都有两次。(这没关系,只是你知道而已)。感谢您指出这一点。我使用
PatchCollection
尝试修复我的第一个错误,但现在我不需要它,所以我只使用
ax。在
for
循环中添加补丁。