Векторные графические элементы и растеризация на Python

PythonPythonBeginner
Практиковаться сейчас

This tutorial is from open-source community. Access the source code

💡 Этот учебник переведен с английского с помощью ИИ. Чтобы просмотреть оригинал, вы можете перейти на английский оригинал

Введение

В этом лабораторном занятии вы узнаете о растеризации векторных графических объектов. Растеризация - это процесс преобразования векторных графических объектов в растровое изображение (пиксели). Это может ускорить процесс рендеринга и создавать более мелкие файлы для больших наборов данных, но при этом растровое изображение имеет фиксированное разрешение. Мы будем использовать библиотеку Python Matplotlib для иллюстрации концепции растеризации.

Советы по использованию ВМ

После запуска виртуальной машины щелкните в верхнем левом углу, чтобы переключиться на вкладку Notebook и получить доступ к Jupyter Notebook для практики.

Иногда вам может потребоваться подождать несколько секунд, пока Jupyter Notebook загрузится. Валидация операций не может быть автоматизирована из-за ограничений Jupyter Notebook.

Если вы сталкиваетесь с проблемами во время обучения, не стесняйтесь обращаться к Labby. Оставьте отзыв после занятия, и мы оперативно решим проблему для вас.

Импортируем библиотеки

Прежде чем начать, нам нужно импортировать необходимые библиотеки.

import matplotlib.pyplot as plt
import numpy as np

Создаем данные

Мы создадим некоторые данные, которые будут использоваться для иллюстрации концепции растеризации.

d = np.arange(100).reshape(10, 10)  ## the values to be color-mapped
x, y = np.meshgrid(np.arange(11), np.arange(11))

theta = 0.25*np.pi
xx = x*np.cos(theta) - y*np.sin(theta)  ## rotate x by -theta
yy = x*np.sin(theta) + y*np.cos(theta)  ## rotate y by -theta

Создаем фигуру с четырьмя подграфиками

Мы создадим фигуру с четырьмя подграфиками, чтобы проиллюстрировать разные аспекты растеризации.

fig, ((ax1, ax2), (ax3, ax4)) = plt.subplots(2, 2, layout="constrained")

Создаем график pcolormesh без растеризации

Мы создадим график pcolormesh без растеризации, чтобы проиллюстрировать разницу между растеризацией и отсутствием растеризации.

ax1.set_aspect(1)
ax1.pcolormesh(xx, yy, d)
ax1.set_title("No Rasterization")

Создаем график pcolormesh с растеризацией

Мы создадим график pcolormesh с растеризацией, чтобы показать, как растеризация может ускорить процесс рендеринга и создавать более мелкие файлы.

ax2.set_aspect(1)
ax2.set_title("Rasterization")
ax2.pcolormesh(xx, yy, d, rasterized=True)

Создаем график pcolormesh с наложенным текстом без растеризации

Мы создадим график pcolormesh с наложенным текстом без растеризации, чтобы показать, как векторные графические элементы могут сохранять свои преимущества для некоторых художников, таких как оси и текст.

ax3.set_aspect(1)
ax3.pcolormesh(xx, yy, d)
ax3.text(0.5, 0.5, "Text", alpha=0.2,
         va="center", ha="center", size=50, transform=ax3.transAxes)
ax3.set_title("No Rasterization")

Создаем график pcolormesh с наложенным текстом с растеризацией

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

ax4.set_aspect(1)
m = ax4.pcolormesh(xx, yy, d, zorder=-10)
ax4.text(0.5, 0.5, "Text", alpha=0.2,
         va="center", ha="center", size=50, transform=ax4.transAxes)
ax4.set_rasterization_zorder(0)
ax4.set_title("Rasterization z$<-10$")

Сохраняем графики

Мы сохраним графики в форматах pdf и eps.

plt.savefig("test_rasterization.pdf", dpi=150)
plt.savefig("test_rasterization.eps", dpi=150)

if not plt.rcParams["text.usetex"]:
    plt.savefig("test_rasterization.svg", dpi=150)
    ## svg backend currently ignores the dpi

Резюме

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