Мой сайт
Главная | | Регистрация | Вход
Приветствую Вас Гость | RSS
Меню сайта
Наш опрос
Оцените мой сайт
Всего ответов: 6
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Поиск
Календарь
«  Август 2013  »
ПнВтСрЧтПтСбВс
   1234
567891011
12131415161718
19202122232425
262728293031
Архив записей
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Главная » 2013 » Август » 13 » Как построить график с изолиниями в gnuplot, gri и pylab
    02:15
     

    Как построить график с изолиниями в gnuplot, gri и pylab

    как отобразить двумерные данные с помощью поверхностей уровня в gnuplot. Сегодня я покажу другой способ отобразить двумерные данные на графике: с помощью изолиний, подобно тому, как обозначаются высоты на картах.

    Я покажу как это делается на примере сразу трёх свободных инструментов: gnuplot, gri и matplotlib (он же pylab). Именно этими тремя программами я пользуюсь чаще всего. В тексте буду давать ссылки на полный скрипт, используемый для построения графика, пояснять же буду самое основное. Все графики я буду строить в чёрнобелом варианте, сохраняя в формате EPS. Иллюстрации к этой статье получены последующей конвертацией EPS в PNG.

    Итак, дано: файл с данными sampledata.txt, значения x, y, z в три колонки, массив 8080 точек, каждый следующий «столбец» сетки (следующее значение x) отделён от предыдущего пустой строкой. Файлы такого формата использует gnuplot (для gri и для pylab потребуется преобразовать формат). Задача: построить график с изолиниями постоянного значения z.

    Итак, способ первый,

    строим график с изолиниями в gnuplot

    Здесь всё просто. Отключаем построение поверхности, включаем построение изолиний, включаем «вид сверху», велим выбирать уровни автоматически:unset surface
    set contour
    set view map
    set cntrparam levels auto 10Можно задать уровни изолиний и вручную:set cntrparam levels discrete уровень1, уровень2, уровень3, …Теперь команда
    splot 'sampledata.txt' w lбудет строить график с изолиниями. И вот какой результат получается по-умолчанию в gnuplot:график с изолиниями, построенный в gnuplot
    (Запускал gnuplot так: $ gnuplot plotiso_gnulot.txt)

    Способ второй,

    строим график с изолиниями в gri

    Честно говоря, я считаю, что gri справляется с изолиниями лучше, чем gnuplot. Во всяком случае, здесь, в отличие от gnuplot, значения можно надписать прямо на изолиниях, и есть реальная возможность управлять цветами изолиний при сохранении EPS (пользователей gnuplot в этом месте ждёт сюрприз). При этом gri остаётся инструментом достаточно простым для понимания.

    Небольшое препятствие состоит лишь в том, что необходимо преобразовать формат данных. Gri хочет, чтобы каждая строка данных отделялась была отдельной строкой в файле, а точки были разделены пробелами. Здесь я использую такую возможность gri, как чтение данных из юниксового «пайпа», и делаю все нужные преобразования на лету с помощью awk:open "awk ' /[^s]/ { printf($3 \" \"); } /^\s*$/ { print ; }' sampledata.txt |"
    read grid data 80 80 bycolumns
    closeПостроение же собственно изолиний уже совсем просто:draw contourВот что получает в gri:
    график с изолиниями, построенный в gri
    (gri я запускал так: $ gri -b -output iso_gri.eps < plotiso_gri.txt)

    Способ третий,

    строим изолинии в matplotlib/pylab

    matplotlib — это библиотека для python. Её можно использовать как интерактивно, запуская ipython -pylab, так и внутри обычного скрипта; синтаксис команд построения графиков приближен к синтаксису matlab, но при этом можно использовать на полную возможности Python. А возможности у matplotlib весьма приличные.

    Изолинии строятся одной командой:cset=contour(X,Y,Z)Здесь X, Y, Z — должны быть двумерными массивами одной и той же размерности. Кроме того, в скрипте я отключил раскраску изолиний по умолчанию, чтобы нарисовать все изолинии чёрным цветом (параметр colors='black'). Другие варианты использования contour можно прочитать в help contour, если запустить ipython -pylab.
    Ещё одна команда добавляет к изолиниям подписи:clabel(cset,fmt="%1.1f",fontsize=9)Сохранить результат в файл нужного формата тоже просто:savefig('pylab.eps')Остальные строчки в скрипте — это преобразование формата данных средствами Python. Дополнение: в новых версиях SciPy этот скрипт можно значительно упростить, если воспользоваться функцией loadtxt(), загружающей данные из текстового файла. То, что нам надо.Вот что получается в итоге:
    график с изолиниями, построенный в matplotlib/pylab
    (скрипт я запускал так: $ python plotiso_pylab.txt)

    Конечно, выбор конкретного инструмента — вопрос удобства (имеющегося формата данных, требований к тонкостям настройки графики, имеющегося времени, опыта использования). Я хотел показать, что выбирать есть из чего, и построить на графике изолинии с любой из трёх рассмотренных программ — дело двух–трёх строчек. Совершенствовать же результат и настраивать тонкости отображения можно долго. На мой взгляд, в случае построения изолиний, gri и matplotlib предоставляют больше возможностей.

    Хочу также заметить, что этими тремя программами список инструментов пригодных для построения графиков с изолиниями не исчерпывается. Надо отметить ещё Tioga, plotmtv, GMT, Asymptote. Есть и пакеты, ориентированные на 3D-данные, но которые можно использовать и для 2D: OpenDX, VTK, MayaVi. Вроде бы можно построить изолинии и в R (приличных примеров я не видел). Судя по документации, есть такая возможность и в scilab (но примеров того, что получается — я тоже не видел). Octave, как я понимаю, предоставляет лишь альтернативный интерфейс для gnuplot. Возможно, эту статью я в будущем дополню ещё какими-то примерами. Если кто-то активно строит графики с изолиниями в чём-то другом — предлагаю поделиться ссылкой на подобные инструкции. Ссылки буду добавлять ниже.

    См. также:

    Сравнение 9 программ для построения графиков
    Цветные поверхности в gnuplot в режиме pm3d
    Просмотров: 900 | Добавил: fortanted | Рейтинг: 0.0/0
    Всего комментариев: 0