2016-09-22 119 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')'来手动指定标题,然后更新它可能会更好。我认为blitting适用于文本对象。 –