Когда я был ВУЗ(овцем) нам на первом курсе на лабораторных работах по Физике часто приходилось строить графики. Причем рисовать их приходилось от руки на миллиметровой бумаге. Выглядело это кустарно. С первого раза начертить график не получалось. Приходилось стирать ластиком. Миллиметровая шкала стиралась. На графике появлялись белые облака.
Тогда в 200x просто не хватало навыков программирования чтобы отрисовать эти графики на PC. Сейчас же построить график можно с легкостью на LapTop(е). Причем существует целая куча разных способов построить график на PC. Это можно делать в Google Spreadsheets, MatLab, MathCAD, GNU Octave, GNU Plot, MS Excel, GraphViz, Asymptote.
Попробуем еще построить график на Python при помощи программного компонента matplotlib.
Постановка задачи:
Есть файл LiLog.csv. Вот несколько его строчек:
14, 1.833, 22.25, 22:43:09, 9/7/2023, 1517544445
15, 0.833, 22.25, 22:43:29, 9/7/2023, 1517544465
16, 0.000, 22.25, 22:43:49, 9/7/2023, 1517544485
17, 0.833, 22.25, 22:44:09, 9/7/2023, 1517544505
Надо построить 2D график, где по оси Х n-ный столбец, а по оси Y - k-тый столбец из текстового файла.
Что надо из софтвера?
№ | Программа | Назначение |
1 | Python.exe | Интерпретатор язык программирования Python |
2 | matplotlib | Модуль для визуализации |
3 | csv | Модуль синтаксического разбора *.CSV файлов |
4 | NotePad++.exe | Текстовый редактор для написания Python скрипта и редактирования файла с исходными данными для графика |
Решение
Вот этот скрипт берет *.csv файл и строит график по 4му и 2му столбцу.
import matplotlib.pyplot as plt
import csv
X = []
Y = []
with open('LiLog.csv', 'r') as datafile:
plotting = csv.reader(datafile, delimiter=';')
for ROWS in plotting:
X.append(float(ROWS[5]))
Y.append(float(ROWS[1]))
plt.plot(X, Y)
plt.title('Line Graph using CSV')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
Что происходит в этом скрипте. Программа создает 2 списка: X Y. В список X помещает числа из 4го столбца в список Y помещает данные из второго столбца. Затем программа отрисовывает график по этим значениям на канве в отдельном окне.
Получился вот такой график

Также в график можно добавить еще один график, пояснения (легенду).
import matplotlib.pyplot as plt
import csv
X = []
Y = []
with open('LiLog.csv', 'r') as datafile:
plotting = csv.reader(datafile, delimiter=';')
for ROWS in plotting:
X.append(float(ROWS[5]))
#X.append('{} {}'.format(ROWS[3], ROWS[4]))
Y.append(float(ROWS[1]))
print ('X {} Nums'.format(len(X)))
print ('Y {} Nums'.format(len(Y)))
threshold=63.0
T=[threshold]*len(Y)
print ('Type X {} '.format(type(X)))
print ('Type Y {} '.format(type(Y)))
print ('Type T {} '.format(type(T)))
plt.plot(X, Y)
plt.plot(X, T)
plt.title('Illumination change')
plt.xlabel('Time,[s]')
plt.ylabel('Light level, [Lx]')
plt.grid()
plt.xticks(rotation=-90)
plt.legend(['illumination', 'threshold {} Lx'.format(threshold)])
plt.show()
Чтобы это код исполнился надо предварительно в консоли прописать
pip install matplotlib
Вот, например, для наглядности добавлена прямая порогового значения для данного измерения на уровне 63 Люкс.

График в matplotlib не просто статический. Его можно увеличивать в интересующем месте и подставить поля графика в меню, которое расположено в нижнем левом углу окна.

Достоинства построения графиков на Python
Это бесплатно. В отличие от MatLab, MathCAD в Python вы можете строить графики абсолютно бесплатно.
Есть аналитика. Можно увеличивать график, сохранять график в формате *.png файла, задавать масштаб, подстраивать ширину полей, разворачивать шкалу, накладывать сетку.
По Python скрипту можно сгенерировать *.exe файл на случай, если захочется скрыть алгоритм построения графика.
Нет артефактов и временных файлов. Никаких *.o *.ld не нужно, как если бы вы решили писать графопостроитель на С++. Есть только *.py файл с исходником и больше ничего не нужно.
Всё делается чисто кодом. Вам даже мышка не нужна чтобы построить график. Не будет болеть запястье.
Благодаря Python можно исполнять скрипты в любой операционной системе: Windows, Linux и проч. Главное чтобы был интерпретатор Python и графическая оболочка.
Недостатки построения графиков в Python
Не совсем ясно как отображать отсчеты графика в реальном времени. Например когда числа поступают с улицы из последовательного COM пота или TCP сокета.
Вывод
Интерпретатор Python в связке с Matplotlib это отличный вариант для визуализации экспериментальных данных из текстового *.csv файла.
Акроним | Расшифровка |
CSV | Comma-Separated Values |
PC | personal computer |
Links