Comments 10
Не совсем ясно как отображать отсчеты графика в реальном времени. Например когда числа поступают с улицы из последовательного COM пота или TCP сокета.
Поступают они в массив — его и отображайте. Несколько раз в секунду сможет перерисовываться.
Бесплатных инструментов много
Интерактивных графиков тоже много, в том числе бесплатных
Ты не скроешь код построения графика (да и зачем - не понятно, если данные из csv), потому что большинство способов сделать ехе из питона - это самораспаковывающийся архив и открыть его можно архиватором и взять напрямую код
Это что вообще за чушь? Как сделаешь билдер графиков так он и будет работать. Я больше скажу, большинство решений тоже не создаёт никаких временных файлов. Пишем программу - один ехе, запускаем и она работает без проблем. Ещё и быстро
А это - сомнительное "достижение", требующее постоянно иметь под рукой документацию по библиотеке. Т.к. нет возможности просто изучить инструмент визуально и посмотреть что и как изменится. В чем проблема не использовать мышку - не понятно. У вас нет мышки? Уверен - есть.
Кроссплатформенность - давно не проблема и не крутая фича.
А вот реальные недостатки:
Код всегда открытый, даже если действительно требуется его скрыть нужно использовать разные костыли
Работа с большим количеством данных - черевато потере работоспособности
Кроссплатформенность не такая и кроссплатформенная, потому что зависимости, которые тянет питон зачастую могут не иметь кроссплатформенного решения. Да, не все а даже большинство библиотек для питона являются бинарными и подключаются динамически (dll, so, o, ...)
График использует почту способ использования данных - мы просто их ему передаём (копируем), а он рисует. В крупных программах, нацеленных на работу с большим количеством данных используются датасеты, которые могут не хранить все данные в оперативной памяти. (Хотя тут повтор со вторым пунктом)
Я просто оставлю это здесь
pd.read_csv('1.csv')[['n','k']].plot()
mathplotlib как по мне - слишком уж "развесистый". Если не копипастить из хаутуя в хаутуй, а разбираться из чего оно состоит и как работает - такое себе. Для задачки "быстро визуализировать набор данных" проще взять pandas, а если нужно что-нибудь совсем-совсем легковесное без лишних зависимостей практически без "порога вхождения" - то pygal.
На python c либами доступны все актуальные способы визуализации из других языков программирования (около ~50).
Pandas не просто прячет "все ужасы Matplotlib" внутрь простого метода df.plot(), но и поддерживает несколько других мощных либ рисования, прямо из коробки df.plot(..., backend=<name>)
altair
популярная либа декларативной графики, чертит в vega
bokeh
в лице pandas_bokeh
echarts
свежак из мира Apache. Мощная, юзает свой метод df.eplot()
hvplot
или holoview
, чертит в bokeh
, но может в matplotlib
и plotly
plotly
еще одна очень популярная либа, чертит сама или методом iplot
из либы cufflinks
pdvega
чертит в vega
, см. также altair
Графики - это всегда итерации в сторону прекрасненького, поэтому их сразу правильнее чертить в JupyerLab
- ведь в нем многие сложные вещи окажутся еще проще (автоналожение графиков при вызове неск. df.plot() в одной ячейке, "кристальный" вывод в SVG, доступ коллегам в LAN/WAN как веб-приложения, добавление интерактивности - списков, кнопок итд).
Спасибо за ваш комментарий, аггрегирует много полезных либ. От себя добавлю что plotly - та еще ботва, во всяком случае на фронте. Куча пуллреквестов с фиксами висят с табличкой СМЕРЖИМ, КОГДА ДАДИТЕ НАМ ДЕНЕГ, ну и в целом эти ребята очень меркантильные и неторопливые, не рекомендую. Документация полный трэш. Столкнулся с plotly потому, что на момент выбора bokeh прибывал в забвении.
А чем тот же gnuplot не угодил?
Данные почти всегда требуют предобработки. Ее возможности в gnuplot намного уступают той же Pandas в JupyterLab с коллаборацией и web-шарингом из коробки. GNUPlot, MS LogParser итп утилиты сослужили хорошую службу до эпохи Pandas/Jupyter. Но времена изменились.
А можно попросить наглядный пример одной из ключевых возможностей pandas, недоступных в gnuplot? Интересуюсь, поскольку python в своей работе не использую, но ваше столь резкое сравнение заставляет задуматься
P.S. Речь именно о предварительной обработке имеющихся данных.
Хм, попробую. В работе с графиками много сил отнимают подписи, ховеры итп штуки. Это работа с округл. числами и текстом, срезами, спецсимволами и эмоджи итп. В Питоне строковые операции очень хорошо реализованы. В данных могут быть "дыры", ошибки, пустоты, и их придется обработать. Но Pandas игнорит пустоты или ловко их затирает.
Прямо сейчас написал полезняшку для читателей Хабра. Например, в вашей таблице есть два столбца: "было" и "стало". Курс USD 10/01/23 был 55.3, сегодня 90.69 - но людям хочется рядом с 55.3 и 90.69 увидеть понятное без слов: ▲35.39(64%) То есть мы видим что $ вырос на 35 руб. или на +64%.
Предположим вам нужно это сделать в огромной таблице, скажем на 1 млн. строк. В Pandas мы работаем с целыми столбцами (сериями) и плюем на пустоты до самого конца:
df['ИзмКурса'] = izm(df.Было, df.Стало)
Вот так, одной строкой за 1 секунду вы получите нужное. В любой таблице. С любыми показателями, даже с пустотами.
Но чтобы это сработало, напишем UDF-функцию, в которой сила Pandas и проявляется:
def izm(before, after):
'''Вернет столбец из строк вида '▲300(15%)' для 2-х столбцов до/после.
Если изменений нет, то вернет '-' (c) economist75 '''
izm = after - before
izm = izm.fillna(0).apply(lambda x: '▼' if x<0 else '▲' ) + izm.astype(str) \
+ '(' + (abs(izm/before).round(2)*100).fillna(0).astype(int).astype(str) + '%)'
return izm.replace({'▲(0%)':'-'}).replace({'▲0(0%)':'-'})
Я не будут повторять код для gnuplot и не ожидаю что кто-то это сделает. Уверен что это будет намного больше и дольше. У меня ушло на написание функции 8 минут.
Python: Построение графиков по данным из файла