2012-04-06 16 views
6

eps形式で保存したときに透明度を処理できるように図形をラスタライズするには通常ax.set_rasterized(True)を使用しますが、ラスタライズでは軸ラベルとティックラベルもぼやけますので、全体ではなく軸内のパッチのみをラスタライズする方法があります数字?透明性を備えたeps形式をエクスポートするのに適していますか?ありがとう。 matplotlibのArtistsとしてmatplotlibのラベルをぼかさずにプロットをラスタライズするにはどうすればいいですか?

+1

私はちょうどset_zorderとset_rasterization_zorderを発見した、私は彼らが役に立つと思うが、まだドキュメントを掘って、まだどんな助けにも感謝します。 – nye17

+0

'pdf'を使用できませんか?ラスタライズせずに透明性を維持します。 – Avaris

+0

@Avaris残念ながら私はpdfを使用することはできませんが、epsに固執しなければならないので、ラスタライズは唯一の方法です。 – nye17

答えて

7

は、アーティスト(http://matplotlib.sourceforge.net/api/artist_api.html)に由来する任意のクラスがTrueにキーワードrasterizedセットでラスタライズすることができ、ラスタライズすることができます。パッチをラスタライズするだけです。

私はいくつかの組み合わせを試したところ、うまくいくようです。しかし、品質はあまり良くないようです(http://www.mail-archive.com/[email protected]/msg13276.htmlも参照してください)。

import numpy as np 
import matplotlib.pyplot as plt 


def add_patch(ax, **kwargs): 
    if 'rasterized' in kwargs and kwargs['rasterized']: 
     ax.set_rasterization_zorder(0) 
    ax.fill_between(np.arange(1, 10), 1, 2, zorder=-1, **kwargs) 
    ax.set_xlim(0, 10) 
    ax.set_ylim(0, 3) 
    if 'alpha' in kwargs and kwargs['alpha'] < 1: 
     txt = 'This patch is transparent!' 
    else: 
     txt = 'This patch is not transparent!' 
    ax.text(5, 1.5, txt, ha='center', va='center', fontsize=25, zorder=-2, 
      rasterized=True) 

fig, axes = plt.subplots(nrows=4, sharex=True) 
add_patch(axes[0], alpha=0.2, rasterized=False) 
add_patch(axes[1], alpha=0.2, rasterized=True) 
add_patch(axes[2], rasterized=False) 
add_patch(axes[3], rasterized=True) 

plt.tight_layout() 
plt.savefig('rasterized_transparency.eps') 

私は、ブラウザでそれを表示するためにPNGにepsを変換:

rasterized_transparency.png

も参照してください:How to save figures to pdf as raster images in matplotlib

+0

ありがとう、私はあなたの例を試し、私自身のコードでできるだけ早くテストします。答えはそれまでに受け入れられます;-)。 – nye17

2

dpiを指定した方が良い結果が得られます。デフォルト値はかなり低いと思われます。たとえば、最後の行を

plt.savefig('rasterized_transparency.eps',dpi=200) 

に変更すると、ファイルは4.5Mに拡大し、Acrobatでは最大200%の倍率で表示されます。しかし、私は透明性をサポートするよりコンパクトなフォーマットがおそらく存在することに同意します。

関連する問題