Rasterización para gráficos vectoriales #

La rasterización convierte los gráficos vectoriales en una imagen rasterizada (píxeles). Puede acelerar el renderizado y producir archivos más pequeños para grandes conjuntos de datos, pero tiene el costo de una resolución fija.

Se puede especificar si se debe usar la rasterización por artista. Esto puede ser útil para reducir el tamaño del archivo de artistas grandes, manteniendo las ventajas de los gráficos vectoriales para otros artistas, como los ejes y el texto. Por ejemplo, un pcolormesho complicado contourfpuede simplificarse significativamente mediante la rasterización. La configuración de la rasterización solo afecta a los backends vectoriales como PDF, SVG o PS.

La rasterización está desactivada de forma predeterminada. Hay dos formas de habilitarlo, que también se pueden combinar:

  • Establézcalo set_rasterizeden artistas individuales o utilice el argumento de palabra clave rasterizado al crear el artista.

  • Configure Axes.set_rasterization_zorderpara rasterizar a todos los artistas con un zorder menor que el valor dado.

El tamaño de almacenamiento y la resolución del artista rasterizado están determinados por su tamaño físico y el valor del dpiparámetro pasado a savefig.

Nota

La imagen de este ejemplo que se muestra en la documentación HTML no es un gráfico vectorial. Por lo tanto, no puede ilustrar el efecto de rasterización. Ejecute este ejemplo localmente y verifique los archivos de gráficos generados.

import numpy as np
import matplotlib.pyplot as plt

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, constrained_layout=True)

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

# pcolormesh with rasterization; enabled by keyword argument
ax2.set_aspect(1)
ax2.set_title("Rasterization")
m = ax2.pcolormesh(xx, yy, d, rasterized=True)

# pcolormesh with an overlaid text without rasterization
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 with an overlaid text without rasterization; enabled by zorder.
# Setting the rasterization zorder threshold to 0 and a negative zorder on the
# pcolormesh rasterizes it. All artists have a non-negative zorder by default,
# so they (e.g. the text here) are not affected.
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$")

# Save files in pdf and eps format
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
Sin rasterización, Rasterización, Sin rasterización, Rasterización z$<-10$
The PostScript backend does not support transparency; partially transparent artists will be rendered opaque.

Referencias

En este ejemplo se muestra el uso de las siguientes funciones, métodos, clases y módulos:

Tiempo total de ejecución del script: (0 minutos 2.150 segundos)

Galería generada por Sphinx-Gallery