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

Графика: основные принципы

Вид многоугольника, диска, прямоугольника

В Mathematica способом "заполнения объектов" управляют две директивы: \text{\tt EdgeForm[список директив]} и \text{\tt FaceForm[список директив]}. Они определяют цвет, толщину, прозрачность и стиль заполнения. Пустой \text{\tt FaceForm[]} дает прозрачный многоугольник. В трехмерной графике (см. ниже) с помощью \text{\tt FaceForm} можно определить разные цвета для двух сторон многоугольника (тогда аргумент - список из двух списков директив).

\tt
In[45]:=\{Graphics[\{EdgeForm[\{Thickness[0.5], Dashed, Orange\}],\\
\phantom{In[45]:=\{Gr}Red, Disk[]\}],\\
\phantom{In[45]:=\{}Graphics[ \\
\phantom{In[45]:=\{Gr}\{EdgeForm[\{AbsoluteThickness[0.2], Blue,\\
\phantom{In[45]:=\{Grap}Dashing[\{0.01, .01\}]\}], Cyan, Disk[]\}]\}

\tt
In[46]:=\\
\phantom{In}Graphics[\\
\phantom{InG}\{\{EdgeForm[\{Thickness[0.5], Dashed, Orange\}], Red,\\
\phantom{InGra}Disk[\{0, 0\}, 1\},\\
\phantom{InGr}\{EdgeForm[\{AbsoluteThickness[0.2], Blue,\\
\phantom{InGraph}Dashing[\{0.01, .01\}]\}], FaceForm[Opacity [0.15], Cyan],\\
\phantom{InGra}Disk[\{1, 0\}, 1]\}\}]

Директива Directive

Эта директива служит для формирования единой директивы, являющейся композицией любого набора директив. Удобна при создании сложных комбинаций директив (см. примеры ниже).

Опции

Mathematica также предусматривает множество опций, помогающих придать рисунку удобный, понятный и изящный вид. Общий вид опций следующий: \text{\tt Имя\_oпции }$\to$\text{ Значение}

Рамки и координатные оси

Отношения размеров, взаимное расположение и т. п. удобнее наблюдать при наличии той или иной системы отсчета. Для этого предусмотрены по умолчанию выключенные \text{\tt Axes} (координатные оси), и \text{\tt Frame} (рамка). Чтобы их включить, следует установить их в \text{\tt True}. Кроме того, можно вызвать координатную сетку \text{\tt GridLines}, для чего проще всего установить ее в автоматический режим \text{\tt Automatic}. Все это, разумеется, можно настраивать и украшать.

\tt 
In[47]:=\{Graphics[\{FaceForm[\{Opacity[0.45], Orange\}], Disk[]\},\\
\phantom{In[47]:=\{G}Frame $\to$ True], \\
\phantom{In[47]:=\{}Graphics[\{FaceFormf\{Opacity[0.55], Orange\}], Disk[]},\\
\phantom{In[47]:=\{G}Axes $\to$  True], \\
\phantom{In[47]:=\{}Graphics[\{FaceForm[\{Opacity[0.65], Orange\}], Disk[]\},\\
\phantom{In[47]:=\{G}Frame $\to$ True], GridLines $\to$ Automatic],\\
\phantom{In[47]:=\{}Graphics[\{FaceForm[\{Opacity[0.75], Orange\}], Disk[]\},\\
\phantom{In[47]:=\{G}Axes $\to$ True, GridLines $\to$ Automatic]\}

Так, например, оси можно подписать с помощью \text{\tt AxesLabel} (приписывается список подписей) и \text{\tt LabelStyle} (директива как подписывать или список директив для разных осей), выбрать начало координат \text{\tt AxesOrigin} (приписываются координаты точки), стиль осей \text{\tt AxesStyle} (директива или список директив) и деления на них с помощью \text{\tt Ticks} (дает возможность описать каждое деление на оси максимально подробно: где, что написать, как деление отступает вниз и вверх от оси, как оно выглядит (в примере - нуль по горизонтали)) и \text{\tt TicksStyle} (аналогично):

\tt
In[48]:= \\
\phantom{In}Graphics[\{FaceForm[\{Opacity[0.65], Orange\}], Disk[]\}, \\
\phantom{InG}Axes $\to$ True, AxesOrigin $\to$ \{-1, -1\}, AxesLabel $\to$ {"Ширина"\ \!\!\!\!, у\}, \\
\phantom{InG}LabelStyle $\to$ Directive [Red, Medium, Italic], AxesStyle $\to$ Thick, \\
\phantom{InG}Ticks $\to$ \\
\phantom{InGr}\{\{-1/3, -2/3, \{0, "Zero"\ \!\!\!\!, \{.5, 0.03\},\\
\phantom{InGraph}Directive[Green, Thin]\}, 1/2, 1\}, Automatic\}]

Имеются аналогичные опции для работы с \text{\tt Frame}.

Регулировка размеров рисунка в целом

Опция \text{\tt PlotRange} явно указывает какую область рисунка рисовать (в координатах):

\tt
In[49]:= \\
\phantom{In}\{Graphics[Circle[], PlotRange $\to$ \{0, 1\}, Frame $\to$ True], \\
\phantom{In\{}Graphics[Circle[], PlotRange $\to$ \{\{0, 1\}, \{0, 1\}\}, Frame $\to$ True], \\
\phantom{In\{}Graphics[Circle[], PlotRange $\to$ 2, Frame $\to$ True]\}

Одна пара значений задает пределы изменения у-координаты, две пары -обеих координат. Может также стоять одно число, определяющее максимальные значения обеих координат. Также может принимать значения \text{\tt All} (все точки рисунка) или \text{\tt Full} (все данные). По умолчанию равна \text{\tt Automatic}. Последнее означает, что Mathematica сама решает, что рисовать, а что нет.

Опция \text{\tt ImageSize} в аналогичных терминах задает размер рисунка как целого. Чтобы лучше видеть происходящее, удобно воспользоваться опцией

\tt Background
, которая позволяет закрасить весь прямоугольник образа, т.е. весь \text{\tt ImageSize}:

\tt
In[50]:= \\
\phantom{In}Graphics[Circle[], PlotRange $\to$ \{0, 1\}, ImageSize $\to$ \{100, 150\}, \\
\phantom{InG}Frame $\to$ True, Background $\to$ Orange]

Опция \text{\tt AspectRatio} регулирует отношение высоты рисунка (а не \text{\tt Image}-образа) к его ширине:

\tt
In[51]:=\\
\phantom{In}\{Graphics[Circle[], AspectRatio $\to$ Automatic, \\
\phantom{In\{G}ImageSize $\to$ \{100, 100\}, Frame $\to$ True, Background $\to$ Yellow], \\
\phantom{In\{}Graphics[Circle[], AspectRatio $\to$ 1/2, ImageSize $\to$ \{100, 100\}, \\
\phantom{In\{G}Frame $\to$ True, Background $\to$ Yellow], \\
\phantom{In\{}Graphics[Circle[], AspectRatio $\to$ 2, ImageSize $\to$ \{100, 100\}, \\
\phantom{In\{G}Frame $\to$ True, Background $\to$ Yellow]\}

Отступ от краев прямоугольника образа (наружу) может быть также явно задан с помощью опции \text{\tt ImageMargins}:

\tt
In[52]:=\\
\phantom{In}\{Graphics[Circle[], PlotRange $\to$ \{0, 1\}, ImageSize $\to$ \{100, 200\}, \\
\phantom{In\{G}Frame $\to$ True, Background $\to$ LightOrange], \\
\phantom{In\{}Graphics[Circle[], PlotRange $\to$ \{0, 1\}, ImageSize $\to$ \{100, 200\}, \\
\phantom{In\{G}Frame $\to$ True, Background $\to$ LightOrange, ImageMargins $\to$ 20] , \\
\phantom{In\{}Graphics[Circle[], PlotRange $\to$ \{0, 1\}, ImageSize $\to$ \{100, 200\}, \\
\phantom{In\{G}Frame $\to$ True, Background $\to$ LightOrange, \\
\phantom{In\{G}ImageMargins $\to$ \{\{10, 20\}, \{30, 40\}\}]\}

Отступ от краев прямоугольника образа (внутрь) может быть также явно задан с помощью опции \text{\tt ImagePadding}. При этом можно обрезать вылезающие за \text{\tt Frame} (заданный \text{\tt PlotRange}) фрагменты рисунка с помощью переключателя \text{\tt PlotRangeClipping}:

\tt
In[53]:=\\
\phantom{In}\{Graphics[Circle[], PlotRange $\to$ \{0, 1\}, ImageSize $\to$ \{100, 200\}, \\
\phantom{In\{G}Frame $\to$ True, Background $\to$ LightOrange], \\
\phantom{In\{}Graphics[Circle[], PlotRange $\to$ \{0, 1\}, ImageSize $\to$ \{100, 200\}, \\
\phantom{In\{G}Frame $\to$ True, Background $\to$ LightOrange, ImagePadding $\to$ 20], \\
\phantom{In\{}Graphics[Circle[], PlotRange $\to$ \{0, 1\}, ImageSize $\to$ \{100, 200\}, \\
\phantom{In\{G}Frame $\to$ True, Background $\to$ LightOrange, \\
\phantom{In\{G}ImagePadding $\to$ \{\{10, 20\}, \{30, 40\}\}], \\
\phantom{In\{}Graphics[Circle[], PlotRange $\to$ \{0, 1\}, ImageSize $\to$ \{100, 200\}, \\
\phantom{In\{G}Frame $\to$ True, Background $\to$ LightOrange, \\
\phantom{In\{G}ImagePadding $\to$ \{\{10, 20\}, \{30, 40\}\}, PlotRangeClipping $\to$ True]\}

Расширение \text{\tt Frame} от размеров границы, заданной \text{\tt PlotRange}, определяется \text{\tt PlotRangePadding} (в размерных единицах чертежа). При этом фактически меняется \text{\tt PlotRange}:

\tt
In[54]:=\\
\phantom{In\{}{Graphics[Circle[], PlotRange $\to$ \{0, 1\}, Frame $\to$ True, \\
\phantom{In\{G}Background $\to$ LightOrange], \\
\phantom{In\{}Graphics[Circle[], PlotRange $\to$ \{0, 1\}, Frame $\to$ True, \\
\phantom{In\{G}Background $\to$ LightOrange, PlotRangePadding $\to$ 1/2], \\
\phantom{In\{}Graphics[Circle[], PlotRange $\to$ \{0, 1\}, Frame $\to$ True, \\
\phantom{In\{G}Background $\to$ LightOrange, PlotRangePadding $\to$ 1/2, \\
\phantom{In\{G}PlotRangeClipping $\to$ True]\}

Украшательства

Комбинируя опции этого типа, такие как \text{\tt Background, Prolog, Epilog} и т.п., можно регулировать вид фона, взаимное перекрытие объектов и т.п. Имеются также опции, управляющие выводом текста.

Светлана Петрова
Светлана Петрова
Украина
Марина Семенова
Марина Семенова
Россия, г. Чебоксары