CITKIT.ru - свободные мысли о свободном софте
Деловая газета CitCity.ru Библиотека CITForum.ru Форумы Курилка
Каталог софта Движение Open Source Дискуссионный клуб Дистрибутивы Окружение Приложения Заметки Разное
28.11.2021

Последние комментарии

ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)
24 December, 22:53
Kubuntu Feisty (15)
24 December, 18:42
Один на один с Windows XP (3758)
24 December, 11:46

Каталог софта

Desktop
Internet
Internet-серверы
Безопасность
Бизнес/Офис
Игры
Мультимедиа
Наука
Операционные системы
Программирование
СУБД
Создание веб-сайтов
Утилиты

Статьи

Дискуссионный клуб
Linux в школе
Open Source и деньги
Open Source и жизнь
Windows vs Linux
Копирайт
Кто такие анонимусы
Лицензии
Нетбуки
Нужен ли русский Linux?
Пользователи
Дистрибутивы
Идеология
Выбор дистрибутива
Archlinux & CRUX
Debian
Fedora
Gentoo
LFS
LiveCD
Mandriva
OpenSolaris
Slackware
Zenwalk
Другие линуксы
BSD
MINIX
Движение Open Source
История
Классика жанра
Окружение
shell
Библиотеки UI
Графические среды
Шрифты
Приложения
Безопасность
Управление пакетами
Разное
Linuxformat. Колонки Алексея Федорчука
Заметки
Блогометки
Файловые системы
Заметки о ядре

Заметки :: Блогометки :: Приложения

Цветные поверхности в gnuplot в режиме pm3d

http://sovety.blogspot.com/2008/01/gnuplot-pm3d.html

Материал распространяется на условиях Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.

Задача: визуализация двумерных данных, то есть некой зависимости вида
z=f(x,y). Всем понятный пример такой функции: карта высот некоторого района, высота является функцией координат.

Распространены следующие способы графического отображения значений такой функции:

  1. рисовать изолинии значений функции, вдоль которых значение функции не меняется;
  2. раскрашивать плоскость {x,y} цветами, зависящими от значения функции (чем выше, тем желтее на физических картах);
  3. рисовать проекцию воображаемой поверхности с таким рельефом, как если бы значения функции в каждой точке были высотой этой точки;
  4. комбинировать способы 1–3.

В этом посте я расскажу, как можно рисовать раскрашенную «поверхность» значений функции в gnuplot. О том, как рисовать на графике изолинии, я написал отдельную заметку. Для начального ознакомления с gnuplot я рекомендую прочитать статью Строим научные графики с помощью GNUplot Михаила Конника.

В качестве примера я буду строить график следующей аналитически заданной функции:

хотя ровно то же самое можно делать и с данными из файла.

Надо сказать, что возможность раскрашивать поверхности появилась в gnuplot сравнительно недавно, начиная с версии 4.0. Раньше можно было нарисовать поверхность только с помощью линий.

Чтобы нарисовать поверхность линиями, надо выполнить в gnuplot следующую команду:

splot (cos(5*acos(y/sqrt(x*x+y*y)))/(1+(x*x+y*y))**0.25) w l

где w l — это сокращение от «with lines». Эта и все последующие команды набираются внутри интерпретатора gnuplot. Результат выглядит примерно так:

Перед построением этого графика я задал точку зрения (set view 45,45) и степень детализации (set isosamples 50). В современных версиях gnuplot при использовании интерактивных терминалов (x11,wxt) точку зрения можно менять, поворачивая изображение при нажатой кнопке мыши.

А вот что получается, если использовать режим построения графиков pm3d. Команда:

splot (cos(5*acos(y/sqrt(x*x+y*y)))/(1+(x*x+y*y))**0.25) w pm3d

(w pm3d можно писать полностью как with pm3d). Получаемый результат:

Многие такие графики в цветном варианте выглядят гораздо понятнее. Цветовая палитра — это линейка цветов, крайние цвета соответствуют максимальному и минимальному значению функции. Промежуточные — промежуточным. Палитру, конечно, можно сменить (набираем в gnuplot «help palette» и читаем справку).

Стоит отметить палитру из градаций серого:

set palette gray

после чего повторное построение графика даёт:

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

Я, например, являюсь большим поклонником палитры 30-31-32, которая включается так:

set palette rgbformulae 30,31,32

Это значит, что красный канал определяется формулой №30, зелёный &mdash формулой №31 и синий — формулой №32, а результат выглядит так:

Прелесть этой палитры в том, что даже если её напечатать в градациях серого, градации яркости останутся заметны. Это удобно, если принтер нецветной. Полагаю, что и у людей с нарушениями цветового зрения проблем с такой палитрой тоже будет меньше.

Кому мало встроенных формул для составления палитры — могут загружать палитры из файла. И конечно, RGB — не единственная цветовая модель, которую можно использовать при задании палитры. Доступны также следующие цветовые модели: HSV, CMY, YIQ, XYZ.

Любая палитра может быть инвертирована (перевёрнута), если добавить слово negative после описания палитры в команде set palette. При этом максимум и минимум на палитре меняются местами.

Ну, а если рисовать «трёхмерные» поверхности не нужно, а хочется просто взглянуть на раскрашенную область определения функции «сверху»? Ничего проще!

set view map
splot (cos(5*acos(y/sqrt(x*x+y*y)))/(1+(x*x+y*y))**0.25) w pm3d

Получаем вот такую «цветовую карту» нашей функции:

(здесь я использовал палитру 34-35-36).

По умолчанию палитра растягивается, чтобы охватить весь диапазон данных. Если нужно указать диапазон палитры (цветовой шкалы) явно, можно использовать команду:

set cbrange [минимум:максимум]

Смотрите также:




Комментарии

nick, Mon Jan 26 19:26:10 2009:
Спасибо.

Комментарии заморожены.

Новости:

Все новости на CitCity.ru

Компании месяца

 
Последние комментарии
Почему школам следует использовать только свободные программы (101)
20 Декабрь, 14:51
ОСТОРОЖНО: ВИНДОФИЛИЯ! (2250)

24 Декабрь, 22:53
Linux в школе: мифы про школу и информатику (334)
24 Декабрь, 22:43
Kubuntu Feisty (15)
24 Декабрь, 18:42
Software is like sex: it's better when it's free.
©Linus Torvalds