私は完全なmatplotlibの初心者です。現時点では、サンプルプログラムに小さな変更を加えて何が起こるかを確認し、広範囲にわたるが順序付けられていないドキュメントを理解しようとしています。
既存のtkguiベースのPythonプログラムにグラフ表示を追加しようとしています。グラフが新しいウィンドウに表示されるのは非常にうれしいです。tkに埋め込む必要はありません(まだ、来週かもしれません)。
既存のプログラムには、ユーザーが押すtk.Buttonがあります。このボタンは、一部のデータを取得し、一部のラベルの最大/最小/平均を更新する関数を呼び出します。
ラベルを更新するだけでなく、データのグラフもポップアップするように機能を強化したいと思います。グラフがすでに存在する場合は、次のボタンを押すと、古いトレースが新しいトレースに置き換えられ、軸が再自動スケーリングされます。ユーザーがグラフウィンドウを閉じると、次のボタンを押すと新しいグラフウィンドウがポップアップ表示されます。
すべてのプレスで新鮮なグラフを作成するのは簡単で、self.figテストではないにしても1つになりました。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()