. Всем понятный пример такой функции: карта высот некоторого района, высота является функцией координат.
Распространены следующие способы отобразить графически значения такой функции:
1) рисовать изолинии значений функции, вдоль которых значение функции не меняется;
2) раскрашивать плоскость цветами, зависящими от значения функции (чем выше, тем желтее на физических картах);
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, зелёный формулой №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 [минимум:максимум]
Смотрите также:
☙ справку по режимуpm3d
в gnuplot (набрать help pm3d
)☙ галерею возможностей режима
pm3d
☙ галерею возможностей режима
pm3d
(сокрытие поверхностей)☙ Как построить график с изолиниями в gnuplot, gri и pylab
☙ Сравнение программ для построения графиков