У меня есть фигура, встроенная в окно Tkinter, и всякий раз, когда я играю с ползунком, я хочу обновить один из графиков рассеяния, но не остальные. Вот как выглядит моя фигура:
Цветные «линии» на самом деле являются множественными точками рассеяния между каждой синей точкой. Я хочу, чтобы обновлялись только цветные линии и синие точки, больше ничего (т.е. черный график позади, его синие точки и цветная полоса не будут очищены). Вот мой код для генерации этой фигуры:
def plot():
global ENL
global figStress
global figDisp
global dispx
global dispy
global horizontal
n = np.size(ENL,0)
num = 1
newlist = []
count = True
for e in range(0,n):
dispx = ENL[e,8] * horizontal.get()
dispy = ENL[e,9] * horizontal.get()
netdisp = math.sqrt(dispx**2+dispy**2)
x = ENL[e,0] + dispx
y = ENL[e,1] + dispy
newlist.append((num,x,y,netdisp))
if count:
disparray = np.array([netdisp])
count = False
else:
disparray = np.hstack([disparray,netdisp])
figDisp.add_subplot(111).plot(x,y,'o', markersize=10, markeredgecolor='k',markerfacecolor='deepskyblue', alpha=1,zorder=10)
num +=1
generalmaxdisp = disparray.max()
generalmindisp = disparray.min()
for a in range(0,np.size(EL,0)):
node1 = EL[a,0]
node2 = EL[a,1]
for el in newlist:
if node1 == el[0]:
x1 = el[1]
y1 = el[2]
disp1 = el[3]
if node2 == el[0]:
x2 = el[1]
y2 = el[2]
disp2 = el[3]
ax = figDisp.add_subplot(111)
m = (y2-y1)/(x2-x1)
x = np.linspace(x1,x2,100)
y = m*(x-x1)+y1
maxdisp = np.array([disp1,disp2]).max()
mindisp = np.array([disp1,disp2]).min()
norm = Normalize(generalmindisp, generalmaxdisp)
compare = np.array([generalmindisp,mindisp,maxdisp,generalmaxdisp])
for i in range(0,len(compare)):
compare[i] = (compare[i] - generalmindisp) / (generalmaxdisp - generalmindisp)
cmap = truncate_colormap(plt.get_cmap("jet"), compare[1], compare[2])
c = np.linspace(compare[0],compare[3],100)
ax.scatter(x,y, c=c/c.max(),cmap = cmap, s=3, edgecolor='none')
if x1 == x2:
x = np.linspace(x1,x2,100)
y = np.linspace(y1,y2,100)
ax.scatter(x,y, c=c,cmap = cmap, s=3, edgecolor='none')
cb = figDisp.colorbar(ScalarMappable(norm=norm,cmap=plt.get_cmap('jet')))
canvasDisp.draw()
Редактировать: добавление графиков, которые я хочу удалить в список, и сохранение остальных, похоже, решило мою проблему.