2015-07-04 6 views
1

Я хотел бы обновить текст матрицы в динамическом режиме, используя функцию анимации matplotlib. Но я обнаружил, что если массив данных слишком велик, анимация станет очень медленной. Есть ли способ улучшить его?Улучшение обновленной скорости в Matplotlib

from matplotlib import animation 
import matplotlib.pyplot as plt 
import numpy as np 

fig, ax = plt.subplots(figsize=(10,20)) 

def updatefig(i): 
    plt.cla() 
    ax.grid() 
    data = np.random.rand(50,50) 
    ax.set_xticks(np.arange(data.shape[1]+1)) 
    ax.set_yticks(np.arange(data.shape[0]+1)) 
    for y in range(data.shape[0]): 
    for x in range(data.shape[1]): 
     plt.text(x + 0.5 , y + 0.5, '%.1f' % data[y, x],horizontalalignment='center',verticalalignment='center',color='b',size = 6) 
    plt.draw() 

anim = animation.FuncAnimation(fig, updatefig,interval=50) 
plt.show() 

На самом деле, я хочу создать график Heatmap со значениями данных, как показано ниже. Но использовать аннотации - единственный способ, который я мог бы понять. Heamap with values

+0

Это много аннотаций .. Вы, вероятно, не будете видеть много с 2500 точек пометки в одном участке (если сюжет не огромен, и данные точки скудны). Во всяком случае, я думаю, что matplotlib не имеет механизма для этого. Вы можете попробовать [this] (http://stackoverflow.com/a/14434334/764322), но я считаю, что результат будет таким же. То, что замедляет вашу анимацию, повторяет все ваши 2500 точек в python. –

ответ

0

Найти обходной путь по модулю импорта. Но как избежать графика мигать

from matplotlib import animation 
import matplotlib.pyplot as plt 
import numpy as np 
import seaborn as sns 

fig, ax = plt.subplots(figsize=(10,20)) 
sns.set() 

def updatefig(i): 
    plt.clf() 
    data = np.random.rand(10,10) 
    sns.heatmap(data, annot=True, linewidths=.5,cbar=False) 

anim = animation.FuncAnimation(fig, updatefig,interval=50) 
plt.show() 
Смежные вопросы