2016-09-22 23 views
1

私は背景をコピーしてブリッティングによって、プロットをアニメーション化するmatplotlibのを使用します。blitを使ったMatplotlibアニメーション - プロットタイトルを更新するには?

f = Figure(tight_layout=True) 
canvas = FigureCanvasTkAgg(f, master=pframe) 
canvas.get_tk_widget().pack() 
ax = f.add_subplot(111) 
# Set inial plot title 
title = ax.set_title("First title") 
canvas.show() 
# Capture the background of the figure 
background = canvas.copy_from_bbox(ax.bbox) 
line, = ax.plot(x, y) 
canvas._tkcanvas.pack() 

定期的に、私はプロットを更新します。

# How to update the title here? 
line.set_ydata(new_data) 
ax.draw_artist(line) 
canvas.blit(ax.bbox) 

どのように更新できます - 可能な限り効率的に、プロットをプロットを更新するたびにタイトル?

編集:

title.set_text("New title") 
ax.draw_artist(title) 

前または

canvas.blit(ax.bbox) 

後にタイトルを更新しません。私は何とかtitleアーティストを再描画しなければならないと思います。つまり、グラフをキャプチャするだけです。blit(ax.bbox)は、タイトルを含むタイトルプロット領域全体を上書きします。

+0

あなたは 'title.set_text(「第二のタイトル」)を使用することができます'タイトルを更新します。 –

+0

@Ed Smith残念なことに 'title.set_text(" Second title ")'はタイトルを更新しません。おそらくタイトルテキストアーティストは再描画する必要がありますか? –

+0

こんにちは@Eugen Epure、あなたが再描画する必要があります、私はこれを示すために最小限の例で答えを追加しました –

答えて

-1

以下はプロットを描画し、変更を行うことができます、

import matplotlib.pyplot as plt 
import numpy as np 

fig, ax = plt.subplots(1,1) 
ax.plot(np.linspace(0.,10.,100)) 
title = ax.set_title("First title") 
plt.show(block=False) 

タイトルは、その後使用して更新することができ、

title.set_text("Second title") 
plt.draw() 
+0

ありがとう!もちろんこれは動作しますが、 'plt.draw()'は非常に非効率的です。私はバックグラウンドをコピーして 'canvas.blit(ax.bbox)'を使うようにしようとしています(これは少なくとも10-20倍速くなります)、問題は 'ax .draw_artist(タイトル) '。 –

+0

こんにちは@Eugen Epure、私は 'blit'はタイトルが変更されることを想定していないと思います。 'title = plt.text(5,11、 'Second title')'というテキストを使ってタイトルを手動で指定し、これを更新する方が良いでしょう。私は、ブリッティングがテキストオブジェクトで動作すると思うでしょう。 –

関連する問題