Опубликован: 03.12.2012 | Уровень: для всех | Доступ: платный
Лекция 7:

Работа с графикой: визуализация функций одной переменной

< Лекция 6 || Лекция 7: 1234 || Лекция 8 >

6.2. Опции графических функций построения двумерных объектов

Внешний вид изображений, получаемых при помощи двумерных графических функций, может изменяться в зависимости от желания пользователя. В этом ему помогают дополнительные аргументы функций — опции. Все опции задаются в виде подстановок, т.е., как Opt->val, где Opt — заголовок опции, а val — задаваемое значение (А. Н. Прокопеня и А. В. Чичурин [5, с. 45]).

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

Очень часто, в зависимости от поведения изображаемых зависимостей, координаты пересечения осей на рисунке находятся не в точке (0,0). Чтобы самостоятельно установить эти координаты (причём не обязательно в точке (0,0)), используется опция, задаваемая в виде AxesOrigin->{x0,y0}.

Опция GridLines набрасывает на рисунок сетку вертикальных и горизонтальных линий. По умолчанию координатная сетка на рисунке отсутствует. При задании опции в виде GridLines->Automatic линии выходят из точек координатных осей с координатными отметками. Однако положение линий можно определить самостоятельно, задав опцию в виде GridLines->{{gridx1,gridx2,...},{gridy1,gridy2,...}}, где gridx1,gridx2,... указывают положение линии по оси абсцисс, а gridy1,gridy2,...по оси ординат. Значениями gridx и gridy могут быть не только обычные числа, соответствующие координатам на осях, но и списки {n,Directive[d1,d2,...]}, где обязательный аргумент n задаёт положение линии, а d1,d2,... есть директивы, которые следует применить к этой линии (цвет, тип, толщина и др.).

Как было отмечено выше, Mathematica, строя графики непрерывных зависимостей, вычисляет значения функции всего в нескольких точках. Число точек, в которых изначально вычисляется значение функции, можно задавать самостоятельно при помощи опции PlotPoints. Принцип, по которому определяется количество точек построения, описывает Е. М. Воробьёв [1, с. 79]. По умолчанию их количество равно 25. Однако если угол между последовательными сегментами превосходит некоторое заданное программой значение, то производится дробление интервала между соседними точками, и, таким образом, число точек, в которых вычисляется функция, автоматически увеличивается.

При использовании так называемого адаптивного алгоритма вычисления функции в нескольких точках приводит к уменьшению времени вычислений, но может привести к уменьшению точности. Если точностью пренебрегать нельзя, то следует задать следующую опцию: Method->{Compiled->False}.

На рисунке 6.6 мы построили квадратичную параболу. В примере In[1] мы не использовали никаких дополнительных опций. В примере In[2] мы изменили цвет и толщину линии графика при помощи опции PlotStyle->{Green,Thick,Dashed}, перенесли начало координат в точку (0,0), задав AxesOrigin->{0,0}, при помощи опции GridLines->{{6,8,{10,Directive[Red,Dashed,Thickness[0.01]]},12,14},{10,20,30}} набросили на рисунок сетку, изменив цвет, толщину и тип одной из её линий, а также попутно повысили до ста число точек, в которых вычисляется функция, опцией PlotPoints->100 и отказались от ускорения построения графика за счёт уменьшения точности при помощи опции Method->{Compiled->False}.

Подробней об опциях AxesOrigin и GridLines см. книги Е. М. Воробьёва [1, с. 77–78] и А. Н. Прокопени и А. В. Чичурина [5, с. 52].

Влияние специфических опций функций Plot и ParametricPlot на изображение

Рис. 6.6. Влияние специфических опций функций Plot и ParametricPlot на изображение

Опция AspectRatio определяет отношение высоты двумерного рисунка к его ширине. По умолчанию ей задано значение 1/GoldenRatio, где GoldenRatio есть именованная константа, "золотое сечение", приближённо равное 1.61803. Пользователь может присвоить опции любое численное значения, руководствуясь необходимостью.

При помощи опции Axes можно указывать на рисунке или убирать с него координатные оси. Если опции присвоено значение True (оно же задаётся по умолчанию), то будут нарисованы все оси. Если присвоено значение False, то осей на рисунке не будет вовсе. Если опция задана как список Axes->{axx,axy}, то выражение axx определяет наличие на рисунке оси абсцисс, а axy — оси ординат, причём axx и axy могут принимать значения True и False.

Если оси всё-таки были сохранены на рисунке, то может пригодиться опция AxesStyle, которая позволяет управлять способом изображения осей. При помощи графических директив можно задавать относительную толщину осей, используя Thickness[d], насыщенность линии GrayLevel[d], цвет в разных цветовых координатах RGBColor[d1,d2,...] и Hue[d1,d2,...], длину последовательных участков прерывистой линии Dashing[d1,d2,...], причём d1,d2,... заключены в интервале от 0 до 1.

Опция AxesStyle не оказывает влияния на внешний вид рисунка, если Axes->False.

Mathematica самостоятельно расставляет координатные отметки на осях, однако если пользователя автоматическая расстановка не устраивает, он может расставить их самостоятельно при помощи опции Ticks->{{x1,x2,..},{y1,y2,...}}, где x1,x2,.. и y1,y2,... указывают координаты отметок на осях абсцисс и ординат, соответственно. Один из внутренних списков можно заменить на Automatic, тогда по этой оси расстановка отметок будет автоматической. Когда осей на рисунке нет (в случае Axes->False), опция Ticks никакого действия на рисунок не оказывает.

Опция AxesLabel позволяет подписать оси: задаётся также в виде списка {Xname,Yname}, где Xname,Yname названия осей абсцисс и ординат, соответственно. В случае если Axes->False, опция AxesLabel никаких надписей на рисунке не сделает.

Дать название всему рисунку можно при помощи опции PlotLabel.

По умолчанию все рисунки строятся на белом фоне, однако цветом фона можно управлять при помощи опции Background. Цвет задаётся в одной из трёх цветовых схем: для дисплеев это RGB[d1,d2,d3] (красный, синий, зелёный) и Hue[h,s,b] (h — обязательный параметр, определяющий положение цвета в цветовой Hue-палитре, s — насыщенность, b — яркость цвета; h, s, b находятся на отрезке от 0 до 1), а для цветных принтеров CMY[d1,d2,d3,d4] (синий, пурпурный, жёлтый, чёрный). Можно также определить серый цвет фона и менять его относительную интенсивность, задав опцию в виде Background->GrayLevel[d], где d может меняться в пределах от 0 до 1, при этом d=0 устанавливает черный фон, d=1 — белый фон.

Опция ColorOutput позволяет "подогнать" цветовые директивы под конкретное графическое устройство. Так установка ColorOutput->GrayLevel раскрашивает изображение в оттенки серого.

Опция TextStyle позволяет задать тип и размер шрифта текста на рисунке.

На рис. 6.7 мы построили параметрическую зависимость 2*Sin[v] от 3*Cos[v]. При этом в примере In[1] мы обошлись автоматическим заданием всех опций. В примере In[2] мы задали отношение высоты к ширине рисунка как обратную экспоненту при помощи опции AspectRatio->1/E, изменили цвет и толщину осей, задав опцию AxesStyle->{{Thick,RGBColor[0.9,0,0.8]},{Thick,Green}}, задали собственные отметки на оси абсцисс Pi/2, 0 и -Pi/2, оставив автоматическое задание отметок по оси ординат, Ticks->{{0,Pi/2,-Pi/2},Automatic}, сделали надписи по осям, AxesLabel->{"Ось абсцисс","Ось ординат"}, и подписали весь рисунок, PlotLabel->"Рисунок", увеличили шрифт надписей на рисунке и изменили их цвет, TextStyle->{16,Blue}, а также сделали фон рисунка светло серым, Background->GrayLevel[0.9].

Подробней об опциях AspectRatio, ColorOutput и опциях управления координатными осями см. книги Е. М. Воробьёва [1, с. 72–74] и А. Н. Прокопени и А. В. Чичурина [5, с. 51–52].

Изменение внешнего вида рисунка при помощи опций. Пример 1

Рис. 6.7. Изменение внешнего вида рисунка при помощи опций. Пример 1

Опция, заданная в виде Frame->True, заключает рисунок в прямоугольную рамку. Каждую сторону этой рамки, по часовой стрелке, начиная с нижней стороны, можно подписать при помощи опции FrameLabel->{"side1","side2","side3","side4"}. По умолчанию надписи side1 и side3 располагаются горизонтально, а side2 и side4 — вертикально (и читаются снизу вверх). Расположить все надписи горизонтально позволяет опция RotateLabel->False. Если опция задана в виде FrameLabel->"label", то надпись label помещается возле левой стороны рамки. Опция FrameStyle выполняет те же функции по отношению к рамке, что и опция AxesStyle — к осям. Опция FrameStyle не оказывает влияния на внешний вид рисунка, если Frame->False.

Опция может быть задана в виде Frame->{{bleft,bright},{bupper,blower}}, где bleft,bright,bupper и blower определяют присутствие левой, правой, верхней и нижней границ рамки, соответственно. Эти аргументы могут принимать только значения True или False (соответственно, наличие или отсутствие линии).

Опция Frame->{uplow,lefrig} определяет наличие (отсутствие) одновременно верхней и нижней или правой и левой границ рамки.

Если задана опция в виде Frame->True, то координатные отметки ставятся не на осях, а на сторонах рамки. Самостоятельно задать расстановку отметок на рамке можно опцией FrameTicks, действие которой аналогично действию опции Ticks для осей. Аналогично, когда рамки на рисунке нет (в случае Frame->False), опция FrameTicks не оказывает влияния на рисунок.

Для выбора области графика зависимости, которая будет отображаться на рисунке, имеется опция PlotRange. По умолчанию отображается наиболее характерная для зависимости часть графика, а нехарактерные регионы игнорируются. Если присвоить её значение All, то будут отображаться все значения. Выбрать область отображения самостоятельно можно, задав опцию в виде PlotRange->{{xmin,xmax},{ymin,ymax}}, где {xmin,xmax},{ymin,ymax} определяют границы по осям абсцисс и ординат, соответственно, в которых будет построен график.

На рис. 6.8 мы построили кубическую параболу (w-5)^3+10. В примере In[1] мы обошлись автоматическим заданием всех опций. В примере In[2] мы построили график в заданных границах, PlotRange->{{2,8},{-10,30}}, заключили рисунок в прямоугольную рамку, Frame->True, и избавились от координатных осей, Axes->False, подписали все стороны прямоугольной рамки, FrameLabel->{"низ","лево","верх","право"}, и поменяли цвет её линий, FrameStyle->{{Red},{Green},{Blue},{Magenta}}, самостоятельно задали положение координатных отметок на стороне рамки вдоль оси абсцисс, FrameTicks->{{Automatic,None},{{2,5,8},None}}.

Подробней об опции PlotRange и опциях управления рамкой см. книги Е. М. Воробьёва [1, с. 73–75] и А. Н. Прокопени и А. В. Чичурина [5, с. 51–52].

Изменение внешнего вида рисунка при помощи опций. Пример 2

Рис. 6.8. Изменение внешнего вида рисунка при помощи опций. Пример 2

На рисунках особым образом можно выделять не только линии графиков, но и целые области. Для этого используется опция Filling. Если на рисунке построен только один график, то опции можно задать следующие значения: Axis, Top, Bottom, некоторое численное значение.

В In[1] на рис. 6.9 несколько раз построим одну и ту же кривую, задавая при каждом построении различные значения опции Filling. При задании опции в виде Filling->Axis заполняется цветом область между линией графика и осью абсцисс (верхнее левое изображение в Out[1] на рис. 6.9), Filling->Тop — область выше графика, а Filling->Bottom — область ниже графика (верхнее правое и нижнее левое изображения, соответственно), при задании опции некоторого значения n, Filling->n, цветом заполняется область между линией графика и прямой, параллельной оси абсцисс, соответствующей значению n (нижнее правое изображение).

Выделение области на рисунке с одним графиком

Рис. 6.9. Выделение области на рисунке с одним графиком

Если на одном рисунке изображены графики сразу нескольких зависимостей, к областям, ограниченным линиями этих графиков можно применять ещё более избирательное выделение. На рис. 6.10 мы построили графики двух функций одной и той же переменной. Задав опции в виде Filling->Axis (верхнее левое изображение на рис. 6.10), мы заполнили цветом область между линиями графиков и осью абсцисс, при этом области под разными графиками заполняются разными цветами, а область перекрытия областей заполняется суперпозицией этих цветов. Опция в виде Filling->{2->Axis} заполняет цветом только область под линией графика второй (в списке аргумента) функции (верхнее правое изображение). При задании Filling->{1->{2}} (левое нижнее изображение) заполняет область между графиками функций под номерами 1 и 2. Цвет заполнения областей, безусловно, можно выбирать самостоятельно. Для этого мы задали опцию в виде Filling->{1->{{2},{Green,Red}}} (нижнее правое изображение), и теперь область между кривыми будет заполняться зелёным цветом, если первая кривая находится под второй, и красным — наоборот, когда первая кривая находится над второй.

Безусловно, возможна более гибкая настройка оформления областей на рисунках, но ввиду её специфичности оставим эту тему за пределами нашего рассмотрения в рамках настоящего курса.

Подробней об опциях заполнения областей между графиками см. книгу В. П. Дьяконова [2, с. 445–448].

Выделение области на рисунке с одним графиком

Рис. 6.10. Выделение области на рисунке с одним графиком
< Лекция 6 || Лекция 7: 1234 || Лекция 8 >
Наталья Егорова
Наталья Егорова
Россия, Новосибирск, НГПУ, 1994
Максим Радунцев
Максим Радунцев
Россия