簡體   English   中英

Python Matplotlib Blit並更新文本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM