Philip Wiki

Персональный wiki-сайт

Инструменты пользователя

Инструменты сайта


docs:blog:2020:10:generate_chart

Генерируем график (в 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
Только авторизованные участники могут оставлять комментарии.
docs/blog/2020/10/generate_chart.txt · Последнее изменение: 05.01.2021 00:18 — philip

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki