在matplotlib创建一个正方形网格(补丁)

时间:2017-06-07 16:15:56

标签: python matplotlib

我正在尝试生成一个方格网格,每个网格之间有一个小的偏移,并且我会使用我的优秀matplotlib技能。不幸的是输出只显示一个方格,所以我怀疑matplotlib没有得到消息来绘制我正在初始化的所有补丁对象,但尽管有很多拖网堆栈溢出我无法解决这个问题。

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)

关于出了什么问题的任何想法?

1 个答案:

答案 0 :(得分:1)

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

这可以通过重新划分轴来抵消

ax.relim()
ax.autoscale_view()

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

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

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

ax.add_patch(sq)替换pat.append(sq)。请注意,relim()在使用PatchCollection时不起作用,并且需要手动重新定位轴。 enter image description here