[英]Python matplotlib blit and update a text
我知道這個主題經常彈出,但是經過多次嘗試,搜索和放棄后,我將它帶回給您。
我有一個類,其中包含一個matplotlib圖。 在此圖中,我想要一個文本,當用戶按下某個鍵時,該文本將更新為某種內容,而不會在軸上繪制所有繁重的內容。 看來我需要在這里燒別人,但是如何? 這是一個有效的示例,這是到目前為止我能得到的最好的示例。
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()
第一個問題:給東西抹血時,前面的文字出現在后面。 我希望它消失了!
第二點:實際上,我更願意將其作為無花果文字使用,不受任何限制。 聽起來可行嗎?
您是最好的,非常感謝。
之前的文本仍然留在后面,因為您從未刪除過它-只是畫在上面。 為防止這種情況,您應該將圖形保存在文本所在的位置,然后顯示文本,然后,當文本更改時,恢復保存的背景並重新顯示文本。
matplotlib.ArtistAnimation已經為您完成了所有這一切,因此您可以使用它:
import matplotlib as mpl
mpl.use('TkAgg')
import matplotlib.pyplot as plt
from matplotlib.animation import ArtistAnimation
import numpy as np
class textUpdater:
def __init__(self):
self.fig, self.ax = plt.subplots()
self.text = self.ax.text(.5, .5, 'Blabla')
self.fig.canvas.mpl_connect('key_press_event', self.action)
self.fig.canvas.draw()
self.animation = ArtistAnimation(self.fig, [(self.text,)])
plt.show()
def action(self, event):
if event.key == 'z':
self.text.set_text('Blooooo')
textUpdater()
現在,對於第二個問題, Figure.text將創建僅屬於該圖的文本,但是ArtistAnimation
不支持不屬於任何軸的藝術家,因此在這種情況下,您可能需要重新定義ArtistAnimation
來支持它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.