我知道這個話題經常出現,但經過多次嘗試,搜索和放棄之後,我將它帶回給您。python matplotlib blit並更新文本
我有一個類,它包含一個matplotlib圖。在這個圖中,我想要一個文本,當用戶點擊某個鍵時,文本會更新爲某些內容,而不會繪製軸中所有重量較大的東西。它看起來像我需要在這裏blit一個人,但如何?這是一個可行的例子,這是我迄今爲止所能得到的最好的例子。
import matplotlib as mpl
mpl.use('TkAgg')
import matplotlib.pyplot as plt
import numpy as np
class textUpdater:
def __init__(self):
self.fig, self.ax = plt.subplots()
# self.text = plt.figtext(.02, .14, 'Blibli')
self.text = self.ax.text(0, .5, 'Blabla')#, transform = self.ax.transAxes)#, animated=True)
self.fig.canvas.mpl_connect('key_press_event', self.action)
self.fig.canvas.draw()
plt.show()
def action(self, event):
if event.key == 'z':
self.text.set_text('Blooooo')
self.ax.draw_artist(self.text)
self.fig.canvas.blit(self.text.get_window_extent())
textUpdater()
第一個問題:當事情發生時,前面的文字出現在後面。我希望它消失!
第二:我實際上更喜歡將它作爲無花果文本,不包括任何軸。這聽起來可行嗎?
你是最好的,非常感謝。
謝謝Tim!出於某種原因,我認爲我不得不遠離mpl.animation,但是這是完美的。我會嘗試將這個東西改編爲一個Figure.text。再次感謝。 – Etienne
我已經提交了一個[bug報告](https://github.com/matplotlib/matplotlib/issues/6965)與matplotlib關於不支持這種行爲。我想我會很快提交補丁,但在那之前,你只需要重新定義[ArtistAnimation._init_draw](https://github.com/matplotlib/matplotlib/blob/master/lib/matplotlib/animation.py#L1200 )方法使用'artist.get_figure()'而不是'artist.axes.figure'。 –