図のラスタライズ

散布図をPDFやSVGで保存するとき,点が多いと,ファイルサイズが大きくなり,開くのに時間がかかる。軸や文字はベクトルのままで,プロットだけラスタライズ(ビットマップ画像化)したい。

Rasterization Demo を参考に,いろいろやってみた。

import matplotlib.pyplot as plt
import numpy as np

plt.rcParams['svg.fonttype'] = 'none' # SVGの文字をパスにしない

rng = np.random.default_rng()
x = rng.multivariate_normal([68,68], [[6,4],[4,6]], 1000)

plt.plot(x[:,0], x[:,1], 'o')
plt.title('散布図')
plt.xlabel(r'$x$')
plt.ylabel(r'$y$')
plt.savefig('200211a.svg')
重いSVG
plt.clf()
plt.plot(x[:,0], x[:,1], 'o', zorder=-10)
plt.title('散布図')
plt.xlabel(r'$x$')
plt.ylabel(r'$y$')
# plt.gca().set_rasterized(True) で全部ラスタライズする
plt.gca().set_rasterization_zorder(0) # zorder < 0 だけラスタライズする
plt.savefig('200211b.svg')
軽いSVG

Last modified: