Встраивание Bokeh и больших данных в графический интерфейс Tkinter - PullRequest
0 голосов
/ 23 января 2019

Я создаю exe-приложение с графическим интерфейсом, которое может отображать большие данные около 200 миллионов точек данных на график.До сих пор я нашел единственный способ, позволяющий удаленно поддерживать достойную производительность, - это использовать Bokeh и Holoviews / HVPLOT с Datashade.Первоначально я построил свою программу с использованием Tkinter для запуска в качестве исполняемого файла с использованием визуализаций Matplotlib / Seaborn, но это не работает с точки зрения производительности при построении больших данных.Я обнаружил, что Bokeh и Datashade могут справиться с этой задачей, но есть ли способ встроить Bokeh / Holoviews в графический интерфейс Tkinter?Боке строит графики высокого разрешения внутри ноутбука Jupyter или версию с пониженным разрешением при выводе в файл HTML.

1 Ответ

0 голосов
/ 24 января 2019

Это не конфигурация, которая в настоящее время поддерживается напрямую, но у вас есть несколько вариантов:

  1. Можно ли отображать только голое изображение графика, без рисования осей и без наложения накарты или другие типы данных?В этом случае вы можете использовать только интерфейс Datashader, показанный в руководстве пользователя по адресу datashader.org , который позволяет создавать изображения PNG, которые можно легко отобразить в Tkinter.

  2. Если вам нужны оси и числовые или текстовые метки, можно ли визуализировать эти закадровые изображения в статический PNG, который можно отобразить в Tk, без каких-либо интерактивных элементов управления?Если это так, вы можете использовать HoloViews с бэкэндом Matplotlib для рендеринга ваших графиков Datashader в PNG и вставлять их так же, как в случае 1. См., Например, примеры mpl в руководстве пользователя Datashader .

  3. Если вам нужны оси и вам нужны интерактивные элементы управления (например, увеличение и уменьшение масштаба), с 2016 года ведется работа по внедрению Datashader в Matplotlib с интерактивными элементами управления ,Этот код не запускался в течение нескольких лет и даже в то время не был достаточно зрелым для непосредственного включения в Matplotlib или Datashader, но кажется, что он может стать отправной точкой для работы Datashader везде, где у Matplotlib есть бэкэнд.

  4. Если подход 3 не работает, вы можете объединить подходы 2 и 3 или 1 и 3, показывая статичное изображение, но вручную имея кнопки / виджеты масштаба / панорамирования / диапазона в Tkinterкоторый вы используете для создания вызова API Datashader (вариант 1) или вызова HoloViews (вариант 2).Этот подход будет более неудобным для использования, но позволит вам реализовать все, что вам нравится.

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

...