我正在尝试编写用于在我的GUI中刷新绘图的代码,但每次都不是刷新绘图中的绘图,而是绘制下一个图形的不同位置。
if tumortypeplot== 'Atypical Teratoid Rhabdoid Tumour':
f = Figure(figsize=(7.5,5), dpi=100)
f.gca().invert_xaxis()
a = f.add_subplot(111)
if var1.get()==1:
a.errorbar(ppm, atrtave_pf, atrtsd_pf, linestyle='-', ecolor='g', marker='^')
a.set_title('Atypical Teratoid - Rhabdoid Tumour_ Posterior fossa')
a.set_xlabel('Frequency/ppm')
a.set_ylabel('Intensity (au)')
elif var2.get()==1:
a.errorbar(ppm, atrtave_sp, atrtsd_sp, linestyle='-', ecolor='g', marker='^')
a.set_title('Atypical Teratoid - Rhabdoid Tumour_ Supratentorial')
a.set_xlabel('Frequency/ppm')
a.set_ylabel('Intensity (au)')
canvas = FigureCanvasTkAgg(f, master=root)
canvas.show()
canvas.get_tk_widget().pack(side="right")
我尝试使用a.clf()或a.clear()。但我不行。 我刚刚开始使用python并且需要你的帮助来找出我的代码有什么问题。
答案 0 :(得分:0)
由于a
是一个轴对象,因此它没有清晰的数字clf
方法。这应该引发错误,可能会被try语句隐藏?要清除当前轴,您需要致电a.cla()
(或a.clear()
)。然后,您可以调用新的绘图命令,该命令应替换当前图形上的轴。
对于你的gui,如果这不起作用,你可以清除图f.clf()
并完全替换为新的情节。请注意,在wxpython
中,作为gui的一部分,您需要使用f.clf(keep_observers=True)
然后读取子图等a=f.add_subplot(111)
以获得正确的结果。
对于错误栏而言很复杂的最快选项,因为它包含许多对象,是从错误栏功能更新返回句柄中的数据并重绘。这看起来像是,
eb = a.errorbar(ppm, atrtave_pf, atrtsd_pf, linestyle='-', ecolor='g', marker='^')
然后,当您更新ppm
和atrtave_pf
并想要更新这些行时,
line=eb.line[0]
line.set_data(ppm, atrtave_pf)
f.canvas.draw()
虽然您可能还需要手动更新eb
中的错误栏,但这可能比它的价值更麻烦。