Альтернативой ответу unutbu является использование пакета copy
, который может копировать объекты.Очень трудно увидеть, как все меняется после одного звонка add_patch
, но это так.Свойства патча axes
, figure
, extents
, clip_box
, transform
и window_extent
изменены.К сожалению, поверхностная печать каждого из этих свойств приводит к одной и той же строке, поэтому похоже, что они не меняются.Но базовые атрибуты некоторых или всех этих свойств, например, extents
- это Bbox
, вероятно, изменены.
Вызов копирования позволит вам получить уникальный патч для каждой фигуры, которую вы делаете, не зная, что это за патч.Это все еще не отвечает, почему это происходит, но, как я уже писал выше, это альтернативное решение проблемы:
import copy
def doplot(x,y,patch,count):
newPatch = copy.copy(patch)
fig = plt.figure(dpi=50)
ax = fig.add_subplot(111)
im = ax.scatter(x,y)
ax.add_patch(newPatch)
im.set_clip_path(newPatch)
plt.savefig(str(count) + '.png')
Также вы можете использовать fig.savefig(str(count) + '.png')
.Это явно сохраняет фигуру fig
, где при вызове plt.savefig
сохраняется текущая фигура, которая, как вам нужно.