LINUX.ORG.RU

Вышла библиотека MathGL 1.8 и программа UDAV 0.5

 , , , , , ,


0

0

Библиотека MathGL предназначена для построения широкого спектра графиков (кривых, поверхностей, поверхностей уровня и т.д.). Библиотека платформонезависимая. Есть возможность экспорта графики в растровые (PNG, JPEG) или векторные (EPS, SVG, IDTF) файлы, рисования в консольном режиме и т.д. Из нового:

  • интерфейс для Python и Octave,
  • новые типы графиков (Barh и Region),
  • Qt widget,
  • новые функции по обработке данных,
  • улучшения в цветовой схеме и легенде, вывод цветного текста, пользовательские метки по осям и пр.
Сайт программы: http://mathgl.sf.net

UDAV — программа построения графиков и изображений на основе скриптового языка MathGL. Поддерживается широкий спектр графиков и функций редактирования данных. Оконный интерфейс (на основе Qt4) позволяет вращать/двигать/приближать графики мышкой и с помощью меню, включать/выключать прозрачность и освещение, смотреть на графики с разных углов зрения (при разных параметрах построения). Из нового:

  • диалог советов и замены текста,
  • улучшена "раскраска" кода,
  • рисование в отдельном потоке,
  • вывод информации о текущей команде, позиции мыши и пр.
Сайт программы: http://udav.sf.net

>>> Подробности

Я в мануале не могу найти ответ на следующий вопрос:

Можно ли начертить график в масштабе? То есть к примеру график 10 см на 10 см отрендерить как 600 dpi с миллиметровой сеткой чтобы напечатать? И если это возможно, то как именно?

anonymous
()

Хорошая новость! Давно присматриваюсь к этой библиотеке.

Но пока что пользуюсь gnuplot.

Кто-нибудь из активно использующих может сказать в каких областях оно мощнее, а в каких беднее по возможностям, чем gnuplot?

Конкретный вопрос - насколько просто с помощью него строить трёхмерные гистограммы (то есть обычная гистограмма строится по значениям f(x), а эта по значениям f(x,y))? В gnuplot потребовалась значительная модификация входных данных, чтобы имитировать этот тип графиков с помощью графика другого типа :(

Как у него с автоматизацией процесса построения графиков? Ведь в обоих случаях есть свой скриптовый язык.

anonymous
()

Кстати, гентушники, ebuild есть в оверлее science!

Obey-Kun ★★★★★
()
Ответ на: комментарий от anonymous

> Конкретный вопрос - насколько просто с помощью него строить трёхмерные гистограммы (то есть обычная гистограмма строится по значениям f(x), а эта по значениям f(x,y))? В gnuplot потребовалась значительная модификация входных данных, чтобы имитировать этот тип графиков с помощью графика другого типа :(

Surface by boxes (На сайте есть скрин!)

Вопрос закрыт. Отлично!

anonymous
()
Ответ на: комментарий от anonymous

Похоже ли на нужную трехмерную гистограмму вот это:

http://mathgl.sourceforge.net/mathgl/mathgl_11.html#SEC387

А чам оно лучше gnuplot Вы ответили сами - в gnuplot настоящего 3d нет и не будет, так как интерфейс к драйверам двумерный и менять это никто не собирается, патчи обходящие это ограничение предлагались, но были не просто отвергнуты, а проигнорированы командой разработиков и пользователями.

anonymous
()
Ответ на: комментарий от anonymous

> Похоже ли на нужную трехмерную гистограмму вот это:

> http://mathgl.sourceforge.net/mathgl/mathgl_11.html#SEC387

Скорее всего, что это оно и есть. Спасибо!

> А чам оно лучше gnuplot Вы ответили сами - в gnuplot настоящего 3d нет и не будет, так как интерфейс к драйверам двумерный и менять это никто не собирается, патчи обходящие это ограничение предлагались, но были не просто отвергнуты, а проигнорированы командой разработиков и пользователями.

Да, к сожалению. К тому же, если я всё верно понимаю, то из-за специфической лицензии gnuplot бинарные сборки патченных версий распространять нельзя :(

anonymous
()

великолепная библиотека во всех отношения

lester ★★★★
()
Ответ на: комментарий от dimon555

> а какой ещё векторный формат из свободных можно заюзать?

PostScript - не? pdf ещё есть.

Evgueni ★★★★★
()
Ответ на: комментарий от anonymous

>> А чам оно лучше gnuplot Вы ответили сами - в gnuplot настоящего 3d нет и не будет, так как интерфейс к драйверам двумерный и менять это никто не собирается, патчи обходящие это ограничение предлагались, но были не просто отвергнуты, а проигнорированы командой разработиков и пользователями.

>Да, к сожалению. К тому же, если я всё верно понимаю, то из-за специфической лицензии gnuplot бинарные сборки патченных версий распространять нельзя :(

В этом смысле выигрывают gentooшники, так как исходники и патчи распространять можно. А всем остальным приходится собирать самостоятельно. С другой стороны ничто не мешает написать пакет который тянет gnuplot, патч и собирает его во время установки.

IMHO по графикам следует сравнивать на с gnuplot (надёжная, простая, но абсолютно двумерная рисовалка), а с R

Evgueni ★★★★★
()
Ответ на: комментарий от Evgueni

Наверное 3D функции MathGL можно попробовать сравнить ещё с тем, что есть в ROOT.

Да, а сборка под Ubunty планируется?

Evgueni ★★★★★
()
Ответ на: комментарий от anonymous

> Можно ли начертить график в масштабе? То есть к примеру график 10 см на 10 см отрендерить как 600 dpi с миллиметровой сеткой чтобы напечатать? И если это возможно, то как именно?

gr->SetSize(4*600, 4*600);

Здесь 4 = 10/2.5 -- размер картинки в дюймах.

abalakin ★★
() автор топика
Ответ на: комментарий от Evgueni

> Да, а сборка под Ubunty планируется?

Скоро должны появиться пакеты под Дебиан, это почти Ubuntu. Или собрать самому (в autoconf'е все есть).

abalakin ★★
() автор топика
Ответ на: комментарий от anonymous

> Документации на русском больше нет?

Пока нет :( если руки дойдут сделаю. Слишком большой текст :)

abalakin ★★
() автор топика

Народ, а как всю эту красоту (я так понимаю, что только MathGL получится) из под С пользовать ? А то plplot как-то не очень (

anonymous
()
Ответ на: комментарий от Valeriy_Onuchin

> Впечатляет. Всё так же "один в поле воин"?

В основном да, хотя здорово помогают с тестированием + установка (скрипты сборки) и IDTF не мое :)

abalakin ★★
() автор топика
Ответ на: комментарий от anonymous

> Народ, а как всю эту красоту (я так понимаю, что только MathGL получится) из под С пользовать ? А то plplot как-то не очень (

Смотри http://mathgl.sourceforge.net/mathgl/mathgl_8.html

Еще можно посмотреть примеры http://mathgl.sourceforge.net/pictures.html -- в каждом есть С-ый код + "шаблон" для его запуска (http://mathgl.sourceforge.net/how_use.html -- ссылка есть в примерах).

В принципе можно и скрипты MGL использовать: http://mathgl.sourceforge.net/parser.html

abalakin ★★
() автор топика
Ответ на: комментарий от abalakin

Нашел баг. Использую дженту, в /etc/make.conf стоят следующие флаги :

CFLAGS="-march=prescott -O2 -pipe -fomit-frame-pointer -msse3"

CXXFLAGS="${CFLAGS}"

но ваш ./configure в Makefile записывает следующее :

QT_CFLAGS = prescott -O2 -pipe -fomit-frame-pointer -msse3 -Wall -W -D_REENTRANT $(QT_DEFINES)

QT_CXXFLAGS = prescott -O2 -pipe -fomit-frame-pointer -msse3 -Wall -W -D_REENTRANT $(QT_DEFINES)

т.е. "-march=" куда-то пропадает и сборка не проходит. Попытаюсь найти косяк в ./configure

htower_ ★★
()
Ответ на: комментарий от Obey-Kun

> А по точкам оно может график построить?

Если заданны строкой (матрицей и т.д.), то легко -- большинство функций именно это делают.

Если произвольный набор точек в пространстве, то можно так http://mathgl.sourceforge.net/crust.html или так http://mathgl.sourceforge.net/dots.html

Еще можно строить поверхность произвольным набором треугольников (см, mglGraph::TriPlot)

abalakin ★★
() автор топика

А оно научилось не выкидывать треугольники, если поверхность уровня проходит в точности через точку трехмерной решетки?

halyavin
()
Ответ на: комментарий от htower_

Как я понял, косяк в qt_sed_filter. Будем копать дальше :)

htower_ ★★
()
Ответ на: комментарий от halyavin

> А оно научилось не выкидывать треугольники, если поверхность уровня проходит в точности через точку трехмерной решетки?

Да

abalakin ★★
() автор топика
Ответ на: комментарий от abalakin

Кажется нашел причину проблемы с флагами. В вашем скрипте ./configure присутствует такая строка :

sed "/^CFLAGS[^A-Z]*=/!d;$qt_sed_filter" $at_mfile

при наличии в Makefil'e, который генерируется qmake'ом такой строки

CFLAGS = -pipe -march=prescott -O2 -pipe -fomit-frame-pointer -msse3 -Wall -W -D_REENTRANT $(DEFINES)

первое действие qt_sed_filter (s///) вырезает из исходной строки не совсем то, что требуется, а именно - оно должно удалять "CFLAGS =", но оно удаляет "CFLAGS = -pipe -march=". Такая ситуация обусловлена тем, что неправильно задано регулярное выражение "/^CFLAGS[^A-Z]*=", при его изменении на "/^CFLAGS[ ]*=" всё работает нормально.

Т.е. исходный код удаляет "CFLAGS" + все символы не являющиеся заглавными лат. буквами + символ "=". А с учетом описанного выше нужно удалять "CFLAGS" + все последующие пробелы + "=". Проверьте, пожалуйста ваш скрипт и внесите в него соответсвующие изменения.

P.S. Аналогично следует исправить и все остальные строки, относящиеся к разбору Qt'шного Makefile.

htower_ ★★
()
Ответ на: комментарий от ivon

> не парься, используй root.cern.ch

Для чего? Для построения графики? нет уж увольте :). Для обработки данных? Может быть.

Собственно для этого и был написан SWIG интерфейс -- для включения рисования графиков в разные оболочки/программы обработки данных (Octave, R, Python и пр). Вот если объединить ROOT и MathGL, то действительно выйдет нечто стоящее :).

abalakin ★★
() автор топика

Подскажите пожалуйста, чем сабж лучше http://scidavis.sourceforge.net ?

А то я сейчас как раз в процессе выбора программы для обработки и визуализации данных и пока обнаружил только зоопарк программ-близнецов типа labplot, qtplot, scidavis

anonymous
()
Ответ на: комментарий от anonymous

> Подскажите пожалуйста, чем сабж лучше http://scidavis.sourceforge.net ?

> А то я сейчас как раз в процессе выбора программы для обработки и визуализации данных и пока обнаружил только зоопарк программ-близнецов типа labplot, qtplot, scidavis

В первую очередь предназначением. Основная цель MathGL -- построение графиков, всяких разных и из совершенно разных программ (можно встраивать в Вашу собственную программу) -- MathGL это библиотека. Все перечисленное выше это программы, нацеленные обработку данных (более, менее удачную) и относительно примитивные графики.

Если сравнивать UDAV, то это программа для скриптовой обработки данных -- один раз пишите скрипт ("минипрограмму"), а потом много раз его выполняете (для разных данных или в разное время). Скорее UDAV можно сравнивать с Octave, Scilab, SciPy, Matlab и т.д.

Перечисленные Вами программы ориентированы на "тыканье" мышкой -- для одного графика приемлимо. Но если графиков много или хочется перестроить график еще раз (спустя какое-то время), то очень утомительно, да еще и проблемматично получить такую же картинку. Ну и набор типов графиков скуден.

abalakin ★★
() автор топика
Ответ на: комментарий от abalakin

> Вот если объединить ROOT и MathGL, то действительно выйдет нечто стоящее :).

мы в курсе, что делает Алексей. 
На мой запрос посмотреть на то, что представлено в последней версии MathGL, был получен следующий ответ от Olivier
"
Rene,

After the quick look I had I do not think there fundamental things ROOT cannot do.
I saw: the text on a curve and some 3 axis plots. 

Fons suggested that I should create a such page, sumarizing all the kind of plots ROOT can do, in the new drupal site (demos section may be). I think it is a good idea.

Olivier 
"
Хотя, думаю, некоторые уникальные вещи он "не заметил".
Главное преимущество (с моей точки зрения) MathGL - его "компактность", возможность встраивать во внешние приложения.
С ROOT надо "тащить" всю систему, хотя "мы" над этим работаем.






Valeriy_Onuchin ★★
()

При сборке UDAVа выходит ошибка:

scriptwindow.o: In function `ScriptWindow::loadHDF5(QString const&)': scriptwindow.cpp:(.text+0x1f31): undefined reference to `H5check_version' scriptwindow.cpp:(.text+0x1f6d): undefined reference to `H5Fopen'

и т.д. Система Ubuntu 8.10. Попробовал собрать со всеми имеющимися вариантами libhdf5, компиллируется успешно только с libhdf5-serial-dev, а потом выдаёт вышеприведённую ошибку при линковке.

Где копать? Спасибо.

garry
()
Ответ на: комментарий от garry

> При сборке UDAVа выходит ошибка:

По видимому, я собирал MathGL с поддержкой HDF5 и такую ошибку не видел. Выходов 2: (1) пересобрать MathGL c ключом "./configure --enable-all"; (2) включить опцию "-lhdf5" в src/src.pro -- строка 50 должна выглядеть как "LIBS += -lmgl -lhdf5".

abalakin ★★
() автор топика
Ответ на: комментарий от abalakin

> По видимому, я собирал MathGL с поддержкой HDF5 и такую ошибку не видел. Выходов 2: (1) пересобрать MathGL c ключом "./configure --enable-all"; (2) включить опцию "-lhdf5" в src/src.pro -- строка 50 должна выглядеть как "LIBS += -lmgl -lhdf5".

Спасибо! Заработало с использованием первого варианта. Будем изучать (а то кроме grace ничего нету приличного, а там нет 3D).

garry
()

Ещё один вопрос, если можно. На сайте библиотеки указано, что есть набор шрифтов, который предлагается скачать. Вопрос: а что с этими шрифтами делать? Т.е., как их корректно установить на debian/ubuntu системе?

Спасибо.

garry
()

Может, это и странно спрашивать, но я всё-таки спрошу: как собирать Удава? Нет configure, нет makefile, нет INSTALL.
Хотя бы последний надо добавить :-)

sergey_feo
()
Ответ на: комментарий от sergey_feo

> Может, это и странно спрашивать, но я всё-таки спрошу: как собирать
> Удава? Нет configure, нет makefile, нет INSTALL.

> Хотя бы последний надо добавить :-)


qmake udav.pro
make
make install

garry
()

Предлагаю написать файл 1.mgs следующего содержания:

axis -1 -1 1 1
axis
grid

new y 100
modify y 'x'
plot y

text 0 0.75 0 'y=x?'

Потом сделать файл mgl_learn следующего содержания:

mgl2svg ./1.mgs && gqview ./1.mgs.svg

c правом на исполнение и выполнить.

Только у меня линия уехала на 0.5 вверх?

sergey_feo
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.