Вы находитесь на странице: 1из 8

Цель работы: получение навыков построения графиков функций и

разметки координатных осей.

Вариант 7

1. Постановка задачи.

4. Описать подпрограммы для разметки координатных осей.


5. Описать подпрограмму для автоматического выбора размеров
мирового окна таким образом, чтобы оно являлось прямоугольной оболочкой
графика функции.
6. Описать подпрограмму для вывода на экран графика функции.
7. Составить программу для вывода на экран графиков функций,
заданных явно и параметрически в табл. 3, в соответствии с номером
варианта.

2. Спецификации подпрограмм.

1.2 Иерархическая структура рисунка в matplotlib


Главной единицей (объектом самого высокого уровня) при работе с
matplotlib является рисунок (Figure). Любой рисунок в matplotlib имеет
вложенную структуру и чем-то напоминает матрёшку. Пользовательская
работа подразумевает операции с разными уровнями этой матрёшки:

Figure(Рисунок) -> Axes(Область рисования) -> Axis(Координатная ось)

Рисунок (Figure)
Рисунок является объектом самого верхнего уровня, на котором
располагаются одна или несколько областей рисования (Axes), элементы
рисунка Artisits (заголовки, легенда и т.д.) и основа-холст (Canvas). На рисунке
может быть несколько областей рисования Axes, но данная область рисования
Axes может принадлежать только одному рисунку Figure.

Область рисования (Axes)


Область рисования является объектом среднего уровня, который
является, наверное, главным объектом работы с графикой matplotlib в
объектно-ориентированом стиле. Это то, что ассоциируется со словом "plot",
это часть изображения с пространством данных. Каждая область рисования
Axes содержит две (или три в случае трёхмерных данных) координатных оси
(Axis объектов), которые упорядочивают отображение данных.

Координатная ось (Axis)


Координатная ось являются объектом среднего уровня, которые
определяют область изменения данных, на них наносятся деления ticks и
подписи к делениям ticklabels. Расположение делений определяется объектом
Locator, а подписи делений обрабатывает объект Formatter. Конфигурация
координатных осей заключается в комбинировании различных свойств
объектов Locator и Formatter.

Элементы рисунка (Artists)


Элементы рисунка Artists являются как бы красной линией для всех
иерархических уровней. Практически всё, что отображается на рисунке
является элементом рисунка (Artist), даже объекты Figure, Axes и Axis.
Элементы рисунка Artists включают в себя такие простые объекты как текст
(Text), плоская линия (Line2D), фигура (Patch) и другие.

Когда происходит отображение рисунка (figure rendering), все элементы


рисунка Artists наносятся на основу-холст (Canvas). Большая часть из них
связывается с областью рисования Axes. Также элемент рисунка не может
совместно использоваться несколькими областями Axes или быть перемещён
с одной на другую.

В Matplotlib заложены как простые графические команды, так и


достаточно сложные. Доступ к ним через pyplot означает использование
синтаксиса вида "plt.название_команды()".

Наиболее распространённые команды для создания научной графики в


matplotlib это:

I. Самые простые графические команды:

plt.scatter() - маркер или точечное рисование;

plt.plot() - ломаная линия;

plt.text() - нанесение текста;

II. Диаграммы:

plt.bar(), plt.barh(), plt.barbs(), broken_barh() - столбчатая диаграмма;

plt.hist(), plt.hist2d(), plt.hlines - гистограмма;

plt.pie() - круговая диаграмма;

plt.boxplot() - "ящик с усами" (boxwhisker);

plt.errorbar() - оценка погрешности, "усы".

III. Изображения в изолиниях:


plt.contour() - изолинии;

plt.contourf() - изолинии с послойной окраской;

IV. Отображения:

plt.pcolor(), plt.pcolormesh() - псевдоцветное изображение матрицы (2D


массива);

plt.imshow() - вставка графики (пиксели + сглаживание);

plt.matshow() - отображение данных в виде квадратов.

V. Заливка:

plt.fill() - заливка многоугольника;

plt.fill_between(), plt.fill_betweenx() - заливка между двумя линиями;

VI. Векторные диаграммы:

plt.streamplot() - линии тока;

plt.quiver() - векторное поле.

3. Описание основных алгоритмов.

Был применен модуль matplotlib, где было создано окно, нанесены оси и
обозначения в декартовой системе координат, и выполнено построение по
формулам:

Вариант Функция, заданная параметрически Функция, заданная в явном


виде
1 2 3
7 Гиперболическая спираль: y = x sin x
a cos t
x=
t
a sin t
y=
t
(−  t  0;0  t  +)

Все команды расположены в одной программе для каждой функции

4. Тексты программ.
Листинг программы для функции, заданной параметрически.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
plt.rcParams['legend.fontsize'] = 10
fig, ax = plt.subplots()
ax = fig.gca()
a=4
th=np.linspace(-10, 10, 65)
x=(a*np.cos(th)/th)
y=(a*np.sin(th)/th)
ax.plot(x, y)
plt.axis('equal')
ax.xaxis.set_major_locator(ticker.MultipleLocator(2))
ax.xaxis.set_minor_locator(ticker.MultipleLocator(10))
ax.yaxis.set_major_locator(ticker.MultipleLocator(2))
ax.yaxis.set_minor_locator(ticker.MultipleLocator(10))
ax.grid(which='major',
color = 'k')
ax.minorticks_on()
ax.grid(which='minor',
color = 'gray',
linestyle = ':')
fig.set_figwidth(12)
fig.set_figheight(8)
plt.show()

Листинг программы для функции, заданной в явном виде.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.ticker as ticker
fig, ax = plt.subplots()
ax = fig.gca()
a=-4
x=np.linspace(-10, 10, 65)
y=x*np.sin(x)
ax.plot(x, y)
plt.axis('equal')
ax.xaxis.set_major_locator(ticker.MultipleLocator(2))
ax.xaxis.set_minor_locator(ticker.MultipleLocator(10))
ax.yaxis.set_major_locator(ticker.MultipleLocator(2))
ax.yaxis.set_minor_locator(ticker.MultipleLocator(10))
ax.grid(which='major',
color = 'k')
ax.minorticks_on()
ax.grid(which='minor',
color = 'gray',
linestyle = ':')
fig.set_figwidth(12)
fig.set_figheight(8)
plt.show()

5. Наборы тестовых данных для построения графиков.

Сначала функция, заданная параметрически.

В качестве a возьмем -10

Далее возьмем 4.
Далее функция, заданная явно. Переменных для указания она не
содержит.
6. Ответы на контрольные вопросы.

1. Что такое мировые координаты?

Плоскость XY основной системы координат, с которой мы до сих пор


работали и которая называется мировой системой координат (МСК),
совпадает с плоскостью графического экрана. Третья ось (ось Z) МСК
расположена перпендикулярно экрану и направлена от экрана к нам. В
качестве признака мировой системы координат пиктограмма осей имеет букву
М (в английской версии — W).

2. Основные принципы разметки координатных осей.

Наименование осей
Для задания подписи оси x используется функция xlabel(), оси y –
ylabel(). Разберемся с аргументами данных функций. Здесь и далее аргументы
будем описывать следующим образом:

Имя_аргумента: тип(ы)
Описание
Для функций xlabel()/ylabel() основными являются следующие
аргументы:

xlabel (или ylabel):str


Текст подписи.
labelpad : численное значение либо None; значение по умолчанию: None
Расстояние между областью графика, включающую оси, и меткой.
Функции xlabel()/ylabel() принимают в качестве аргументов параметры
конструктора класса matplotlib.text.Text, некоторые из них нам могут
пригодиться:

fontsize или size: число либо значение из списка: {‘xx-small’, ‘x-small’,


‘small’, ‘medium’, ‘large’, ‘x-large’, ‘xx-large’}.
Размер шрифта.
fontstyle: значение из списка: {‘normal’, ‘italic’, ‘oblique’}.
Стиль шрифта.
fontweight: число в диапазоне от 0 до 1000 либо значение из списка:
{‘ultralight’, ‘light’, ‘normal’, ‘regular’, ‘book’, ‘medium’, ‘roman’, ‘semibold’,
‘demibold’, ‘demi’, ‘bold’, ‘heavy’, ‘extra bold’, ‘black’}.
Толщина шрифта.
color: одни из доступных способов определения цвета см. Цвет линии.
Цвет шрифта.
Пример использования:

plt.xlabel('Day', fontsize=15, color='blue')


Axis (не путать с областями рисования Axes) - это третья "матрёшка"
(после Figure и Axes) или контейнер в matplotlib, которая привязана к области
рисования Axes и на которой располагаются деления осей (ticks), подписи
делений (tick labels) и подписи осей (axis labels).

Координатные оси являются экземплярами класса matplotlib.axis.Axis.

Любая область рисования Axes содержит два особых Artist-контейнера:


XAxis и YAxis. Они отвечают за отрисовку делений (ticks) и подписей (labels)
координатных осей, которые хранятся как экземпляры в переменных xaxis и
yaxis. Чтобы обратиться к экземпляру axis, отвечающему за ось ординат,
нужно обратиться к контейнеру yaxis соответствующей области рисования ax.
Причём запись "yax=ax.get_yaxis()" идентична записи "yax=ax.yaxis".

Каждый экземпляр axis содержит атрибут подписей (label)


координатной оси и список главных (major ticks) и вспомогательных (minor
ticks) делений, а также является хранилищем для экземпляров делений (ticks).
Деления - это экземпляры класса matplotlib.axis.Tick, которые визуализируют
деления (их размер, цвет, толщину и т.д.) и подписи к ним. Деления создаются
динамически исходя из области изменения переданных данных. В результате
на координатной оси появляются и хранятся экземпляры классов
matplotlib.axis.XTick и matplotlib.axis.YTick. Они родственны классу
matplotlib.axis.Tick. Хотя все графические примитивы, с помощью которых
создаётся облик координатной оси содержатся в делениях ticks, о которых
будет показано в следующей главе, у экземпляров axis есть средства для
управления линиями делений (tick lines), подписями делений (tick labels), а
также местоположением делений (tick locations).

3. Автоматический выбор размеров окна для получения целостного


изображения данного объекта.

С учетом используемых технологий он происходит неявно таким


образом, чтобы соответствовать всем указанным параметрам.

Вам также может понравиться