Генерируем график (в PoSh как пример)
Тут появилась задача генерировать график. Решить её было желательно оперативно и малой кровью. Беглый поиск готовых модулей для PowerShell (например для работы с google charts), внезапно ничего толкового не дал. «Встроенные» варианты из .NET с System.Windows.Forms.DataVisualization
в PowerShell Core банально потеряли совместимость (не стал глубоко рыть и решать проблему). Поэтому нашел во всех смыслах универсальное решение – gnuplot.
gnuplot решил все мои задачи – генерировал необходимого вида график и сохранял его в формате png для дальнейшего использования. Написан он на Qt, так что вопросов по мультиплатформенности нет. Поставил его на Windows и следующим способом подключил к скрипту PowerShell:
Set-Alias GnuPlot 'C:\Program Files\gnuplot\bin\gnuplot.exe' -Scope Script
Утилита gnuplot невероятно гибкая, лично для себя выбрал вариант с описанием всего, что нужно, во внешнем конфигурационном файле и подключением (вызовом) его.
GnuPlot -c "c:\temp\data\covid.cfg"
Пример файла конфигурации:
- covid.cfg
set termoption enhanced set terminal png font 'Cascadia Mono' 10 size 800,300 set output 'c:\temp\data\covid.png' set xdata time set timefmt "%d.%m.%Y" set format x "%d-%m" set grid set encoding utf8 set title "Статистика новых заражений" set xlabel 'Дата' set ylabel 'Случаев' plot 'c:\temp\data\covid.dat' using 1:2 with lines lw 2 notitle unset output
Пример файла с данными для графика:
- covid.dat
... 06.10.2020 11615 07.10.2020 11115 08.10.2020 11493 ...
Обновление от 23.10.2020
В котором я решил немного изменить внешний вид графика:
- Добавить разделители визуально упрощающие восприятие (по шкале Y)
- Изменить разделитель при отображении даты (по шкале X)
- Заменить линию на график с заливкой
- Другие небольшие визуальные изменения
Обновленный файл конфигурации:
- covid.cfg
set decimal locale set termoption enhanced set terminal png truecolor font 'Consolas' 10 size 800,300 set output 'c:\temp\data\covid.png' set xdata time set timefmt "%d.%m.%Y" set format x "%d.%m" set format y "%'g" set grid xtics mxtics ytics mytics set encoding utf8 set title "Статистика новых заражений" set xlabel 'Дата' set ylabel 'Случаев' set style fill transparent solid 0.7 plot 'c:\temp\data\covid.dat' using 1:2 w filledcurves x1 notitle unset output