我是一个完全的matplotlib noob,目前对示例程序做了小的改动,看看会发生什么,并试图理解大量但没有很好排序的文档。使用matplotlib时的图形控制
我想添加一个图形显示到现有的基于GUI的python程序。我很高兴图形浮动在一个新窗口中,我不需要将它嵌入到tk中(但也许在下周)。
现有的程序有一个用户按下的tk.Button,它调用一个函数来检索某些数据并更新某些标签中的最大/最小/平均值。
我想增强功能,以及更新标签,它也弹出一个数据图。如果图表已经存在,则下一个按钮按下应该用新的按钮替换旧的跟踪并重新自动缩放轴。如果用户关闭图形窗口,下一个按钮按下应弹出一个新的按钮。
每次按下新图都很容易,加入如果不是self.fig测试会让我下降到一个。它添加了持续跟踪,直到我添加了plt.clf()。但是,如果用户关闭图形窗口,下面的代码不会重新创建它。我认为我需要像图表可见的东西,或者如果图形存在,而不是在self.fig上测试。或者,也许我错过了明显的做法,而且有更好的方法?非常感谢。
import Tkinter as tk
import os, sys
import numpy as np
import numpy.random as npr
import matplotlib.pyplot as plt
class Plotter():
def __init__(self):
self.fig=None
self.ax=None
def do_stuff(self):
# make plausible data
a=np.arange(0,3,0.1)
b=npr.random(1)
c=np.power(a,b)
if not self.fig:
self.fig = plt.figure()
else:
plt.clf()
self.ax = self.fig.add_subplot(111)
self.ax.plot(a,c,'k--')
self.ax.set_yticklabels([])
self.ax.set_xticklabels([])
plt.show()
p=Plotter()
root=tk.Tk()
rt = tk.Button(root, text='Capture', command=p.do_stuff)
rt.grid(row=0, column=0)
qt = tk.Button(root, text='quit', command=sys.exit)
qt.grid(row=1, column=0)
root.mainloop()
感谢您的建议,但我认为这个限制会给修复带来几天的生命。一旦用户喜欢有一个参数的图表,我知道接下来的几个请求将来自哪里。 –
@Neil_UK:我编辑添加了另一个解决方案。我可能应该首先给出这个答案,但它并没有发生在我身上。这给出了一个更明确的方式来判断你的旧数字是否仍然有效或已关闭。 – BrenBarn
您可能还想保留对'ax.plot()'返回的'line'对象的引用。然后,您可以使用'set_xdata'和'set_ydata'来更新图形,而不必拆卸和重建所有的图形和轴对象。 – tacaswell