我正在使用matplotlib和python以及tkinter。我的图表绘制了3条线。下面是相关代码:
fig = plt.Figure(figsize=(8, 6), dpi=92)
canvas = FigureCanvasTkAgg(fig, master=root) # A tk.DrawingArea.
canvas.get_tk_widget().grid(row=2, column=3, columnspan=2, rowspan=2)
plot1 = fig.add_subplot(111)
plot1.set_ylim(40, 210)
plot2 = plot1.twinx()
sysline = plot1.plot(listDateTime, listSystolic, color='orange', label = "Systolic", linewidth=2, linestyle='solid')
dialine = plot1.plot(listDateTime, listDiastolic, color='red', label = "Diastolic", linewidth=2, linestyle='solid')
weightline = plot2.plot(listDateTime, listWeight, color='blue', label = "Weight", linewidth=2, linestyle='dotted')
plot2.set_ylim(160, 220)
for label in plot1.xaxis.get_ticklabels():
label.set_rotation(-90)
plot1.xaxis.set_major_formatter(ticker.FuncFormatter(getDateString))
plot1.set_xlabel("Test Date")
plot1.set_ylabel("Pressure (mmHg)")
plot2.set_ylabel("Weight (lbs)")
plot1.set_title(graphTitle)
plot1.legend(loc='upper left')
plot2.legend(loc='upper right')
plot1.grid(True)
# plot1.set_autoscale_on(True)
# plot2.set_autoscale_on(True)
plt.tight_layout()
canvas.draw()
当我以交互方式加载更新的数据集时,新的线会覆盖旧的线,我更愿意删除旧的线并重新绘制数据。
因为它在子情节上,所以这种方法不起作用:line1 = plot1.pop(0) line1.remove() line2 = plot2.pop(0) line2.remove()
我尝试获取这些行的句柄并使用.remove(),这不会引发错误。但也没有任何效果。
.remove()在重新绘制图形之前不会发生吗?我错过了什么?
1条答案
按热度按时间mctunoxg1#
您的不完整示例无法替换/删除图中前面的行,因为您没有使用
plot1.clear()
和plot2.clear()
。有关详细信息,请参阅此问题:Clearing a subplot in Matplotlib
现在,假设你这样做是为了制作一个“交互式”的情节,这里有一个工作POC:
只有在使用多个逗号分隔的值(如
1,0
或0,1
或200, 0, 14
等)时,上述方法才有效