Rasterisierung für Vektorgrafiken#

Rasterisierung wandelt Vektorgrafiken in ein Rasterbild (Pixel) um. Dies kann das Rendern beschleunigen und bei großen Datensätzen kleinere Dateien erzeugen, geht jedoch auf Kosten einer festen Auflösung.

Ob eine Rasterisierung verwendet werden soll, kann pro Künstler (Artist) angegeben werden. Dies kann nützlich sein, um die Dateigröße großer Künstler zu reduzieren und gleichzeitig die Vorteile von Vektorgrafiken für andere Künstler wie Achsen und Text beizubehalten. Beispielsweise kann ein kompliziertes pcolormesh oder contourf durch Rasterisierung erheblich vereinfacht werden. Das Setzen der Rasterisierung wirkt sich nur auf Vektor-Backends wie PDF, SVG oder PS aus.

Die Rasterisierung ist standardmäßig deaktiviert. Es gibt zwei Möglichkeiten, sie zu aktivieren, die auch kombiniert werden können:

  • Setzen Sie set_rasterized auf einzelnen Künstlern oder verwenden Sie das Schlüsselwortargument rasterized bei der Erstellung des Künstlers.

  • Setzen Sie Axes.set_rasterization_zorder, um alle Künstler mit einem Z-Order kleiner als der angegebenen Wert zu rastern.

Die Speichergröße und die Auflösung des gerasterten Künstlers werden durch seine physische Größe und den Wert des Parameters dpi bestimmt, der an savefig übergeben wird.

Hinweis

Das Bild dieses Beispiels in der HTML-Dokumentation ist keine Vektorgrafik. Daher kann es den Rasterisierungseffekt nicht veranschaulichen. Bitte führen Sie dieses Beispiel lokal aus und überprüfen Sie die generierten Grafikdateien.

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 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")
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
No Rasterization, Rasterization, No Rasterization, Rasterization z$<-10$
The PostScript backend does not support transparency; partially transparent artists will be rendered opaque.

Referenzen

Die Verwendung der folgenden Funktionen, Methoden, Klassen und Module wird in diesem Beispiel gezeigt

Gesamtlaufzeit des Skripts: (0 Minuten 2,912 Sekunden)

Galerie generiert von Sphinx-Gallery