我正在尝试生成一个方格网格,每个网格之间有一个小的偏移,并且我会使用我的优秀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)
关于出了什么问题的任何想法?
答案 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
时不起作用,并且需要手动重新定位轴。