[解決済み] matplotlib でプロットを更新する方法
2022-03-06 08:43:38
質問
こちらの図の再描画に問題があります。時間軸(X軸)の単位をユーザーが指定できるようにして、再計算してこの関数を呼び出しています。
plots()
. 私はプロットを単に更新したいのであって、図に別のプロットを追加したいわけではありません。
def plots():
global vlgaBuffSorted
cntr()
result = collections.defaultdict(list)
for d in vlgaBuffSorted:
result[d['event']].append(d)
result_list = result.values()
f = Figure()
graph1 = f.add_subplot(211)
graph2 = f.add_subplot(212,sharex=graph1)
for item in result_list:
tL = []
vgsL = []
vdsL = []
isubL = []
for dict in item:
tL.append(dict['time'])
vgsL.append(dict['vgs'])
vdsL.append(dict['vds'])
isubL.append(dict['isub'])
graph1.plot(tL,vdsL,'bo',label='a')
graph1.plot(tL,vgsL,'rp',label='b')
graph2.plot(tL,isubL,'b-',label='c')
plotCanvas = FigureCanvasTkAgg(f, pltFrame)
toolbar = NavigationToolbar2TkAgg(plotCanvas, pltFrame)
toolbar.pack(side=BOTTOM)
plotCanvas.get_tk_widget().pack(side=TOP)
解決方法は?
基本的には2つの選択肢があります。
-
現在行っているのと全く同じように、しかし
graph1.clear()
とgraph2.clear()
を実行してから、データを再プロットします。 これは最も時間がかかるが、最も単純で最も堅牢なオプションである。 -
replotting の代わりに、plot オブジェクトのデータを更新すればよいのです。 コードにいくつかの変更を加える必要がありますが、毎回再プロットするよりもずっとずっと速くなるはずです。 しかし、プロットするデータの形状は変更できませんし、データの範囲が変更される場合は、x軸とy軸の制限を手動でリセットする必要があります。
2番目の選択肢の例を挙げると
import matplotlib.pyplot as plt
import numpy as np
x = np.linspace(0, 6*np.pi, 100)
y = np.sin(x)
# You probably won't need this if you're embedding things in a tkinter plot...
plt.ion()
fig = plt.figure()
ax = fig.add_subplot(111)
line1, = ax.plot(x, y, 'r-') # Returns a tuple of line objects, thus the comma
for phase in np.linspace(0, 10*np.pi, 500):
line1.set_ydata(np.sin(x + phase))
fig.canvas.draw()
fig.canvas.flush_events()
関連
-
風力制御におけるKS原理を深く理解するためのpythonアルゴリズム
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み] プログラムの実行やシステムコマンドの呼び出しはどのように行うのですか?
-
[解決済み] リストのリストからフラットなリストを作るには?
-
[解決済み] Matplotlibでプロットを表示するのではなく、画像ファイルに保存する。
-
[解決済み] Matplotlib で凡例をプロットの外側に配置する方法
-
[解決済み] IPythonノートブックmatplotlibプロットをインラインで行う方法
-
[解決済み】ネストされたディレクトリを安全に作成するには?
-
[解決済み] matplotlib のプロットでフォントサイズを変更する方法
-
[解決済み】2つの辞書を1つの式でマージする(辞書の和をとる)には?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python call matlab メソッドの詳細
-
Python jiabaライブラリの使用方法について説明
-
PythonによるExcelファイルの一括操作の説明
-
[解決済み】pygame.error: ビデオシステムが初期化されていない
-
[解決済み】OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
-
[解決済み】終了コード -1073741515 (0xC0000135)でプロセス終了)
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】IndexError: invalid index to scalar variableを修正する方法
-
[解決済み】matplotlibを使ってwhileループでリアルタイムにプロットするにはどうしたらいいですか?
-
[解決済み] matplotlib でプロットを動的に更新する