Python 在matplotlib中创建正方形网格(面片)
我正在尝试生成一个方格,每个方格之间有一个小的偏移量,我想我会使用我高超的matplotlib技能。不幸的是,输出仅显示一个正方形,因此我怀疑matplotlib没有获得打印我正在初始化的所有修补程序对象的消息,但尽管stackoverflow的拖网太多,我无法解决此问题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
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
循环中添加补丁。