Введение
В этом лабе вы научитесь создавать логотип Matplotlib с использованием Python. Библиотека Matplotlib - популярный инструмент визуализации данных для Python, широко используемый в научных вычислениях.
Советы по работе с ВМ
После запуска ВМ нажмите в левом верхнем углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.
Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook не загрузится полностью. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.
Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.
Импорт необходимых библиотек
В этом шаге мы импортируем необходимые библиотеки, в том числе Matplotlib и NumPy.
import matplotlib.pyplot as plt
import numpy as np
Определение констант
В этом шаге мы определим некоторые константы, включая цвет логотипа и шрифт.
MPL_BLUE = '#11557c'
def get_font_properties():
## Исходный шрифт - Calibri, если он не установлен, мы переходим
## к Carlito, который метрически эквивалентен.
if 'Calibri' in matplotlib.font_manager.findfont('Calibri:bold'):
return matplotlib.font_manager.FontProperties(family='Calibri',
weight='bold')
if 'Carlito' in matplotlib.font_manager.findfont('Carlito:bold'):
print('Исходный шрифт не найден. Переходим к Carlito. '
'Текст логотипа не будет отображаться в правильном шрифте.')
return matplotlib.font_manager.FontProperties(family='Carlito',
weight='bold')
print('Исходный шрифт не найден. '
'Текст логотипа не будет отображаться в правильном шрифте.')
return None
Создание осей для иконки
В этом шаге мы создадим полярную ось, содержащую диаграмму радара Matplotlib.
def create_icon_axes(fig, ax_position, lw_bars, lw_grid, lw_border, rgrid):
"""
Создаёт полярную ось, содержащую диаграмму радара matplotlib.
Параметры
----------
fig : matplotlib.figure.Figure
Фигура, в которую рисуется.
ax_position : (float, float, float, float)
Позиция созданной оси в координатах фигуры в виде
(x, y, width, height).
lw_bars : float
Толщина линий для столбцов.
lw_grid : float
Толщина линий для сетки.
lw_border : float
Толщина линии границы оси.
rgrid : array-like
Позиции радиальной сетки.
Возвращает
-------
ax : matplotlib.axes.Axes
Созданная ось.
"""
with plt.rc_context({'axes.edgecolor': MPL_BLUE,
'axes.linewidth': lw_border}):
ax = fig.add_axes(ax_position, projection='polar')
ax.set_axisbelow(True)
N = 7
arc = 2. * np.pi
theta = np.arange(0.0, arc, arc / N)
radii = np.array([2, 6, 8, 7, 4, 5, 8])
width = np.pi / 4 * np.array([0.4, 0.4, 0.6, 0.8, 0.2, 0.5, 0.3])
bars = ax.bar(theta, radii, width=width, bottom=0.0, align='edge',
edgecolor='0.3', lw=lw_bars)
for r, bar in zip(radii, bars):
color = *cm.jet(r / 10.)[:3], 0.6 ## цвет из jet с alpha=0.6
bar.set_facecolor(color)
ax.tick_params(labelbottom=False, labeltop=False,
labelleft=False, labelright=False)
ax.grid(lw=lw_grid, color='0.9')
ax.set_rmax(9)
ax.set_yticks(rgrid)
## фактический видимый фон - немного выходит за пределы оси
ax.add_patch(Rectangle((0, 0), arc, 9.58,
facecolor='white', zorder=0,
clip_on=False, in_layout=False))
return ax
Создание осей для текста
В этом шаге мы создадим ось в fig, которая содержит слово 'matplotlib' в виде текста.
def create_text_axes(fig, height_px):
"""Создаёт ось в *fig*, которая содержит слово 'matplotlib' в виде текста."""
ax = fig.add_axes((0, 0, 1, 1))
ax.set_aspect("equal")
ax.set_axis_off()
path = TextPath((0, 0), "matplotlib", size=height_px * 0.8,
prop=get_font_properties())
angle = 4.25 ## градусы
trans = mtrans.Affine2D().skew_deg(angle, 0)
patch = PathPatch(path, transform=trans + ax.transData, color=MPL_BLUE,
lw=0)
ax.add_patch(patch)
ax.autoscale()
Создание логотипа
В этом шаге мы создадим полную фигуру с логотипом Matplotlib.
def make_logo(height_px, lw_bars, lw_grid, lw_border, rgrid, with_text=False):
"""
Создаёт полную фигуру с логотипом Matplotlib.
Параметры
----------
height_px : int
Высота фигуры в пикселях.
lw_bars : float
Толщина линии границы столбцов.
lw_grid : float
Толщина линии сетки.
lw_border : float
Толщина линии границы иконки.
rgrid : sequence of float
Позиции радиальной сетки.
with_text : bool
Рисовать только иконку или включать слово 'matplotlib' в виде текста.
"""
dpi = 100
height = height_px / dpi
figsize = (5 * height, height) если with_text иначе (height, height)
fig = plt.figure(figsize=figsize, dpi=dpi)
fig.patch.set_alpha(0)
если with_text:
create_text_axes(fig, height_px)
ax_pos = (0.535, 0.12,.17, 0.75) если with_text иначе (0.03, 0.03,.94,.94)
ax = create_icon_axes(fig, ax_pos, lw_bars, lw_grid, lw_border, rgrid)
return fig, ax
Отображение логотипов
В этом шаге мы отобразим логотипы Matplotlib различных размеров.
## Большой логотип:
make_logo(height_px=110, lw_bars=0.7, lw_grid=0.5, lw_border=1,
rgrid=[1, 3, 5, 7])
## Маленький логотип размером 32 пикселя:
make_logo(height_px=32, lw_bars=0.3, lw_grid=0.3, lw_border=0.3, rgrid=[5])
## Большой логотип с текстом, как используется на сайте Matplotlib.
make_logo(height_px=110, lw_bars=0.7, lw_grid=0.5, lw_border=1,
rgrid=[1, 3, 5, 7], with_text=True)
plt.show()
Резюме
В этом практическом занятии вы узнали, как создавать логотип Matplotlib с использованием Python. Следуя шагам, представленным выше, вы можете настроить логотип в соответствии с вашими потребностями и предпочтениями.