Veusz. Программа для построения графиков
Примерно полтора года назад я уже писал про две программы для рисования графиков. Честно говоря, развитие этих программ за это время полшло в худшую сторону: в 8-й версии Grapher’а появились некоторые проблемы с русскими буквами, а SciDAVis стал виснуть на простых операциях.
На днях я решил поискать какие еще есть подобные программы. Я смотрел только программы для визуального оформления графиков, потому что скриптовый софт вроде gnuplot и ему подобные удобны, когда надо одним чёхом построить много графиков или просто посмотреть что из себя представляют визуализируемые данные, а меня в основном интересуют программы для окончательного оформления графиков, когда каждый график оформляется индивидуально, когда по миллиметрам вымеряются положения разных частей графика, чтобы, например, легенда не перекрывала часть графиков. Скриптово это делать слишком утомительно, лучше просто передвигать мышкой ту же самую легенду.
Во время поиска наткнулся на довольно интересную программу, которая называется Veusz. Эта программа распространяется с исходниками под лицензией GPL и работает под Виндой, Линуксом и МакОСью.
В отличие от Grapher’а и SciDAVis’а, Veusz умеет строить не так много графиков:
- обычный двумерный график зависимости y от x;
- линии уровня;
- двумерные картинки;
- гистограммы;
- графики функции, заданные аналитически.
Чтобы лучше понять что из себя представляет Veusz, покажу по шагам как строится график. Честно говоря, я не сразу понял как можно построить график по данным из файла, пришлось даже заглянуть в справку.
Будем считать, что данные в файле у нас уже есть. Я возьму файл, в котором данные расположены в четырех столбцах, разделенных табуляцией. Часть файла показана на картинке:
Что это за данные сейчас не важно, просто возьмем их за данность. На самом деле это зависимость некоторой комплексной величины от частоты в ГГц. Первый столбец — частота, второй — действительная часть величины, третий — мнимая часть, а четверный — модуль.
После запуска программы мы увидим вот такое окно:
Слева у нас дерево графиков, внизу настройки элементов графика, а справа вшений вид того, что мы получим в результате.
Сначала надо импортировать данные из файла. Выбираем в меню Data — Import и остаемся на вкладке Standart.
Сверху выбираем имя файла, откуда будут считываться данные, после чего сразу увидим содержимое этого файла. Из него мы должны загрузить все четыре столбца, для этого в поле Dataset names через пробел или запятые вводим четыре имени: по одному на каждый столбец.
Внизу можно ввести префикс и суффикс, которые будут добавлены к введенным именам. Я добавил префикс «gxx1_».
Нажимаем на кнопку Import, после чего увидим результат импортирования.
Мы загрузили четыре столбца, в каждом из которых 2047 строк.
Закрываем окно импорта и идем проверять, что данные действительно загружены. Для этого выбираем пункт меню Data — Edit и видим наши данные:
Теперь можно построить график. Для этого в дереве слева выбираем график «graph1» (пока он там единственный) и выбираем пункт меню Insert — Add xy. В дереве появился пункт «xy1», выбираем его. Под деревом в свойстве X data Выбираем загруженный столбец с частотой «gxx1_freq», а в X data — «gxx1_abs».
По тем данным, что использовал я, сходу график стал выглядеть вот так:
Но я знаю, что меня на этом графике интересует только диапазон частот 0 — 3 ГГц, а остальное — мусор. Поэтому выбираю в дереве ось X и устанавливаю свойство Max как 3. Для наглядности еще одноименное свойство оси Y устанавливаю как 1.
График теперь выглядит так:
По умолчанию на графике кружочками отмечены точки, по которым график построен, это все отключается.
Я не буду дальше подробно описывать настройки графиков, покажу только конечный результат с двумя графиками и легендой.
Интересно, что в надписях можно использовать формулы в нотации TeX. Честно говоря, рендерятся они немного странно, но это лучше, чем ничего.
По двумерным данным можно строить линии уровня (я их сделал довольно цветастыми, но их можно оставить и в нормальном черно-белом виде).
Или представить эти данные в виде картинки:
Тут надо сказать одну вещь. Дело в том, что разные проги для двумерных данных требуют исходные данные в разных форматах. Grapher, например, хочет, чтобы данные были представлены в виде трех (как минимум) столбцов: координата по X, координата по Y, значение. Таким образом, у нас в файле будет три столбца, а строк будет Nx * Ny, где Nx и Ny — количество отсчетов по осям X и Y.
Veusz для двумерных данных требует, чтобы данные сразу были записаны в виде Nx столбцов и Ny строк. Таким образом, здесь нет координат по осям как таковых, а есть только номера отсчетов, которые и откладываются по осям. Правда, никто не мешает спрятать существующую ось, а вместо нее добавить ось в том масштабе, который нужно. Например, можно для предыдущей картинки сделать такие вот оси:
Но о чтении данных с неравномерными отсчетами при таком формате придется забыть.
Еще в программе есть консоль, в которой омжно вводить команды на языке Python (хе-хе). Пока я, правда, не проникся идеей где это можно использовать кроме как калькулятора.
Файлы проекта Veusz — это текстовые файлы на своем скриптовом языке, поэтому при желании прямо в файле можно подменять ссылки на файлы с нужными данными.
Очень жаль, что программа не умеет строить трехмерные графики, а то так, как это сделано в Grapher’е мне как-то не особо нравится.
В общем, очень даже интересная программа, честно говоря, перейти на нее с Grapher’а я вряд ли решусь, но буду иметь ее в виду.
Еще раз напомню ссылку на официальный сайт программы — http://home.gna.org/veusz/.
PS. Вы можете подписаться на новости сайта через RSS, Группу Вконтакте или Канал в Telegram.
Вовчик:
Спс, хорошая прожка!
25 мая 2010, 1:44 ппВетал:
Такая программка была бы полезна, когда учился в универе! Помогла бы с вышкой!
25 мая 2010, 6:14 ппElectriq:
> Очень жаль, что программа не умеет строить трехмерные графики, а то так, как это сделано в Grapher’е мне как-то не особо нравится.
А что неудобно в Grapher’е?
3 августа 2010, 12:57 ппJenyay:
@Electriq
3 августа 2010, 1:02 ппТрудно объяснить. Там используется хитрый алгоритм для построения поверхности с несколькими параметрами, изменяя которые можно получить чуть ли не любую форму поверхности по одним и тем же данным.