刷新TK中包含Matplotlib图形的画布

时间:2015-07-13 13:58:54

标签: python canvas matplotlib tkinter

我正在尝试编写用于在我的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并且需要你的帮助来找出我的代码有什么问题。

1 个答案:

答案 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='^')

然后,当您更新ppmatrtave_pf并想要更新这些行时,

line=eb.line[0]
line.set_data(ppm, atrtave_pf)
f.canvas.draw()

虽然您可能还需要手动更新eb中的错误栏,但这可能比它的价值更麻烦。