Анимация графика Matplotlib-Seaborn с использованием blitPython

Программы на Python
Ответить
Anonymous
 Анимация графика Matplotlib-Seaborn с использованием blit

Сообщение Anonymous »

Уже есть несколько публикаций об анимированном графике с использованием Matplotlib и о том, как повысить производительность с помощью техники блитирования, но я не смог найти способ анимировать график Сиборна с помощью блита. На данный момент у меня есть приведенный ниже код, который во многом вдохновлен здесь. Перерисовка фигур Seaborn для анимации
Я знаю, что для использования техники блитирования мой метод анимации должен возвращать список Художник перерисовал, я попытался «перебрать» его, передав всех дочерних элементов для каждой оси моего графика, но, видимо, я получаю следующую ошибку: AttributeError: объект 'NoneType' не имеет атрибута '_get_view'
Итак, мой вопрос: где я могу найти Художника, к которому мне нужно вернуться, чтобы техника блита заработала? Боюсь, единственный способ — просмотреть исходный код Seaborn, поскольку в документации вообще не упоминается такой вариант использования...
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import seaborn as sns
import random

g = sns.JointGrid()

x,y = [0], [0]

x_lim = (-2,2)
y_lim = (-2,2)

def prep_axis(g, x_lim, y_lim):
g.ax_joint.clear()
g.ax_joint.set_xlim(x_lim)
g.ax_joint.set_ylim(y_lim)

g.ax_marg_x.clear()
g.ax_marg_x.set_xlim(x_lim)

g.ax_marg_y.clear()
g.ax_marg_y.set_ylim(y_lim)

plt.setp(g.ax_marg_x.get_xticklabels(), visible=False)
plt.setp(g.ax_marg_y.get_yticklabels(), visible=False)
plt.setp(g.ax_marg_x.yaxis.get_majorticklines(), visible=False)
plt.setp(g.ax_marg_x.yaxis.get_minorticklines(), visible=False)
plt.setp(g.ax_marg_y.xaxis.get_majorticklines(), visible=False)
plt.setp(g.ax_marg_y.xaxis.get_minorticklines(), visible=False)
plt.setp(g.ax_marg_x.get_yticklabels(), visible=False)
plt.setp(g.ax_marg_y.get_xticklabels(), visible=False)

def animate(frame):
global g, x_lim, y_lim
prep_axis(g, x_lim, y_lim)

x.append(random.uniform(-1, 1))
y.append(random.uniform(-1, 1))
sns.kdeplot(x=x, y=y, ax=g.ax_joint)
sns.kdeplot(x=x, linewidth=2, ax=g.ax_marg_x)
sns.kdeplot(y=y, linewidth=2, ax=g.ax_marg_y)
#return (*g.ax_joint.get_children(), *g.ax_marg_x.get_children(), *g.ax_marg_y.get_children())

anim = FuncAnimation(
g.figure,
animate,
interval = 50,
blit = False, #True
repeat = True
)

plt.show()


Подробнее здесь: https://stackoverflow.com/questions/792 ... using-blit
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»