LINUX.ORG.RU

Чем в PyQt без тормозов рисовать перегруженные графики?

 , ,


3

3

Пишу на pyqt свой велосипед для обработки данных. Графики рисую по привычке через matplotlib (qt5agg). Проблема в том, что при отрисовке графиков с большим количеством (порядка нескольких миллионов) точек matplotlib аццки жрёт память и эпически тормозит на любом железе. Теоретически, можно извернуться с даунсемплингом и перерисовкой при смене масштаба, но это большой геморрой. Есть ли для таких задач более подходящие инструменты, позволяющие рисовать в pyqt графики быстро и без лишнего бойлерплейта?

★★★★★

Давно не тыкал, но для графиков пользовались qwt (правда, писалось всё на плюсах). Возможно, получится использовать и из питона.

ksv ()
Ответ на: комментарий от d_a

Емнип, это ограничение Qt начиная с 4 - надо стирать всё окно и рисовать заново.

Matplotlib использует qt5 в качестве бекенда, и он это умеет. Впрочем, про qwt вопрос не актуален, потому что оно, похоже, только под второй питон.

Axon ★★★★★ ()
Ответ на: комментарий от Axon

Данных точно было много. По поводу отзывчивости интерфейса - не могу помочь, в проекте мало участвовал. Точно помню что у нас пересчёт занимал много времени (не меньше минуты), тормоза в перерисовке могли и не замечать.

ksv ()

Быстро отрисовать несколько миллионов? Ну хз. Разве что рукми распараллеливать отрисовку или какой-нибудь CUDA использовать. По-моему в реализации все таки проще сделать даунсемплинг.

Aswed ★★★★★ ()
Ответ на: комментарий от RazrFalcon

А что, починили уже? Когда я писал (давно) гуи с графиками, стереть и перерисовать часть было нельзя. Сейчас не найду, а тогда гуглилось что из это из-за ограничений Qt4 (каких-то флагов пейнтера не было, а в Qt3 было всё збс).

d_a ★★★★★ ()
Ответ на: комментарий от Aswed

Но ведь если я могу руками рассчитать до скольки можно даунсемплить датасет в зависимости от размера видимой области и масштаба, то почему это нельзя сделать под капотом бекенда отрисовки? Опять же, я обойдусь без рисования в несколько потоков, но будет хорошо если оно будет выполняться в потоке, отдельном от остального гуя. И это мне тоже лень делать руками.

Axon ★★★★★ ()
Ответ на: комментарий от Landgraf

На моих данных скорость отрисовки и отзывчивость pyqtgraph на порядок выше, чем у matplotlib. При этом, оно и в использовании по первым ощущениям куда приятнее. Прям годнота.

Axon ★★★★★ ()