Python を使ったベクトルグラフィックスのラスタライズ

PythonPythonBeginner
オンラインで実践に進む

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、ベクターグラフィックスのラスタライズについて学びます。ラスタライズは、ベクターグラフィックスをラスタ画像(ピクセル)に変換するプロセスです。これにより、レンダリングの高速化と大きなデータセットに対してより小さなファイルを生成できますが、解像度が固定されるというコストがあります。ここでは、Python の Matplotlib ライブラリを使って、ラスタライズの概念を説明します。

VM のヒント

VM の起動が完了したら、左上隅をクリックしてノートブックタブに切り替え、Jupyter Notebook を使って練習しましょう。

時々、Jupyter Notebook が読み込み終わるまで数秒待つ必要があります。Jupyter Notebook の制限により、操作の検証を自動化することはできません。

学習中に問題に遭遇した場合は、Labby にお問い合わせください。セッション後にフィードバックを提供してください。すぐに問題を解決いたします。

ライブラリのインポート

始める前に必要なライブラリをインポートする必要があります。

import matplotlib.pyplot as plt
import numpy as np

データの作成

ラスタライズの概念を説明するために使用するデータを作成します。

d = np.arange(100).reshape(10, 10)  ## カラーマッピングする値
x, y = np.meshgrid(np.arange(11), np.arange(11))

theta = 0.25*np.pi
xx = x*np.cos(theta) - y*np.sin(theta)  ## x を-θだけ回転
yy = x*np.sin(theta) + y*np.cos(theta)  ## y を-θだけ回転

4 つのサブプロット付きのグラフを作成する

ラスタライズのさまざまな側面を示すために、4 つのサブプロット付きのグラフを作成します。

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 ライブラリを使って、ラスタライズの概念を説明しました。ラスタライズのさまざまな側面を示すために、4 つのサブプロット付きのグラフを作成しました。また、ラスタライズがレンダリングを高速化し、大規模なデータセットに対して小さなファイルを生成できる一方で、固定解像度というコストがかかることも学びました。また、ラスタライズが、軸やテキストなどの一部のアーティストにとってベクトルグラフィックスの利点を維持できる方法も学びました。