我想自动生成一系列剪辑到修补程序的图.如果我尝试重用补丁对象,它会在画布上移动位置.
这个脚本(根据Yann之前的一个问题的答案)演示了正在发生的事情.
import pylab as plt
import scipy as sp
import matplotlib.patches as patches
sp.random.seed(100)
x = sp.random.random(100)
y = sp.random.random(100)
patch = patches.Circle((.75,.75),radius=.25,fc='none')
def doplot(x,y,patch,count):
fig = plt.figure()
ax = fig.add_subplot(111)
im = ax.scatter(x,y)
ax.add_patch(patch)
im.set_clip_path(patch)
plt.savefig(str(count) + '.png')
for count in xrange(4):
doplot(x,count)
第一个情节看起来像这样:
但是在第二个’1.png’中,补丁已经移动了..
然而,再次重新绘制不会移动补丁. ‘2.png’和’3.png’看起来与’1.png’完全相同.
任何人都能指出我正在做错的方向吗?
实际上,我正在使用的补丁相对复杂并且需要一些时间来生成 – 如果可能的话,我宁愿不必每帧都重新制作它们.
最佳答案
通过对每个绘图使用相同的轴可以避免该问题,在每次迭代后调用ax.cla()来清除绘图.
原文链接:https://www.f2er.com/python/439222.htmlimport pylab as plt
import scipy as sp
import matplotlib.patches as patches
sp.random.seed(100)
patch = patches.Circle((.75,fc='none')
fig = plt.figure()
ax = fig.add_subplot(111)
def doplot(x,count):
ax.set_xlim(-0.2,1.2)
ax.set_ylim(-0.2,1.2)
x = sp.random.random(100)
y = sp.random.random(100)
im = ax.scatter(x,y)
ax.add_patch(patch)
im.set_clip_path(patch)
plt.savefig(str(count) + '.png')
ax.cla()
for count in xrange(4):
doplot(x,count)