Уже есть несколько публикаций об анимированном графике с использованием 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
Анимация графика Matplotlib-Seaborn с использованием blit ⇐ Python
Программы на Python
-
Anonymous
1732627425
Anonymous
Уже есть несколько публикаций об анимированном графике с использованием Matplotlib и о том, как повысить производительность с помощью техники блитирования, но я не смог найти способ анимировать график Сиборна с помощью блита. На данный момент у меня есть приведенный ниже код, который во многом вдохновлен здесь. Перерисовка фигур Seaborn для анимации
Я знаю, что для использования техники блитирования мой метод анимации должен возвращать список Художник перерисовал, я попытался «перебрать» его, передав всех дочерних элементов для каждой оси моего графика, но, видимо, я получаю следующую ошибку: [b]AttributeError: объект 'NoneType' не имеет атрибута '_get_view'[/b]
Итак, мой вопрос: где я могу найти Художника, к которому мне нужно вернуться, чтобы техника блита заработала? Боюсь, единственный способ — просмотреть исходный код 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()
Подробнее здесь: [url]https://stackoverflow.com/questions/79226893/animate-matplotlib-seaborn-plot-using-blit[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия