«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Почему при построении графиков с помощью Matplotlib страдает производительность и что можно сделать?

Почему при построении графиков с помощью Matplotlib страдает производительность и что можно сделать?

Опубликовано 6 ноября 2024 г.
Просматривать:869

When Plotting with Matplotlib, Why Does Performance Suffer and What Can Be Done?

Аспекты производительности для построения графиков Matplotlib

При оценке различных библиотек построения графиков Python вы можете столкнуться с проблемами производительности при использовании Matplotlib. В этой статье рассматривается, почему построение графиков Matplotlib может быть медленным, и предлагаются решения для повышения его скорости.

Причины медлительности

Вялая производительность Matplotlib в первую очередь обусловлена ​​двумя факторами:

  • Частые перерисовки: Каждый раз, когда вызывается fig.canvas.draw(), он обновляет всю фигуру, включая такие элементы, как границы осей и метки делений. Этот процесс требует больших вычислительных ресурсов.
  • Многочисленные подграфики: Графики с несколькими подграфиками со множеством меток могут значительно замедлить рендеринг.

Повышение производительности

Чтобы повысить эффективность, рассмотрите следующие стратегии:

1. Использование копирования:

Перенос включает в себя только обновление определенной части холста, а не перерисовку всей фигуры. Это существенно снижает вычислительные затраты. Matplotlib предоставляет методы копирования, специфичные для серверной части, которые различаются в зависимости от используемой среды графического интерфейса.

2. Ограничить перерисовку:

При построении графика используйте параметр Animation=True. В сочетании с модулем анимации Matplotlib этот метод позволяет обновлять определенные объекты без полной перерисовки холста.

3. Настройте подграфики:

Минимизируйте количество подграфиков и галочек. Удалите ненужные элементы, чтобы сократить время рендеринга.

4. Повышение эффективности кода:

Рефакторинг вашего кода, чтобы улучшить его структуру и сократить количество выполняемых операций. По возможности используйте векторизованные операции.

Пример:

Вот оптимизированная версия кода, представленного в вопросе, с использованием копирования с помощью copy_from_bbox и restrestore_region:

import matplotlib.pyplot as plt
import numpy as np
import time

x = np.arange(0, 2*np.pi, 0.01)
y = np.sin(x)

fig, axes = plt.subplots(nrows=6)
fig.show()  # Draw the canvas initially

styles = ['r-', 'g-', 'y-', 'm-', 'k-', 'p-']
lines = [ax.plot(x, y, style)[0] for ax, style in zip(axes, styles)]

# Store background images of the axes
backgrounds = [fig.canvas.copy_from_bbox(ax.bbox) for ax in axes]

tstart = time.time()               
for i in range(1, 200):
    for j, line in enumerate(lines, start=1):
        # Restore the background
        fig.canvas.restore_region(backgrounds[j-1])
        
        # Update the data
        line.set_ydata(sin(j*x i/10.0))  

        # Draw the artist and blit
        ax.draw_artist(line)
        fig.canvas.blit(ax.bbox)

print('FPS:', 200/(time.time()-tstart))

Альтернативные библиотеки

Если производительность Matplotlib остается неудовлетворительной, рассмотрите альтернативные библиотеки построения графиков, такие как например Боке, Сюжетно или Альтаир. Эти библиотеки отдают приоритет интерактивности в реальном времени и оптимизации производительности.

Заявление о выпуске Эта статья перепечатана по адресу: 1729341981. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3