4

ファイルサイズを縮小し、図をPDFファイルとして保存するために、カラーバーでmatplotlibpcolormeshプロットを使用し、プロットとカラーバーにラスタ化を適用します。これにより、ラスター化の後、カラー領域自体が軸に対して上下に少しシフトし、プロットの下端と右端に白い縞模様が表示されることに気付きました。カラーバーにも同じことが起こりますが、これはさらに悪いことに気付きました。細いカラーバーでは、白い縞模様が非常に目立ち、邪魔になります。ラスター化されたプロットのこの動作を回避し、ラスター化された領域をラスター化前と同じ場所に保つ方法はありますか?

rasterization_zorderとをいじってみましたzorder settings。プロットには少し役立ちましたがpcolormesh(下の白いストライプが消えました) colorbar、.

下に、問題を示す 4 つのプロットを含む簡単な例があります。プロットの右下端にある PDF ファイルを拡大して、私の言いたいことを確認してください。

    import numpy as np
    import matplotlib.pyplot as plt

    d = np.arange(100).reshape(10, 10)

    myfig = plt.figure(figsize=(5, 5)) 

    '''plot 1, no rasterization'''
    ax1 = plt.subplot(221)
    plot1 = ax1.pcolormesh(d)
    cbar1 = plt.colorbar(plot1)
    ax1.set_title("no rasterization", fontsize = 10)

    '''plot 2, main plot rasterized, colorbar not'''
    ax2 = plt.subplot(222)
    plot2 = ax2.pcolormesh(d, rasterized=True)
    cbar2 = plt.colorbar(plot2)
    ax2.set_title("plot rasterized", fontsize = 10)

    '''plot 3, main plot and colorbar rasterized'''
    ax3 = plt.subplot(223)
    plot3 = ax3.pcolormesh(d, rasterized=True)
    cbar3 = plt.colorbar(plot3)
    cbar3.solids.set_rasterized(True)  # !!!!!!!! 
    ax3.set_title("plot and cbar rasterized", fontsize = 10)

    '''plot 4, whole axes of main plot and colorbar rasterized, attempt to use rasterization_zorder'''
    ax4 = plt.subplot(224)
    ax4.set_rasterization_zorder(-10)
    plot4 = ax4.pcolormesh(d, zorder=-20)
    '''colorbarbar gets its own axis'''
    from mpl_toolkits.axes_grid1.inset_locator import inset_axes
    ax_cbar4 = inset_axes(ax4,  width="3%", height="100%", loc=6)
    ax_cbar4.set_rasterization_zorder(-10)
    locator_ax_cbar4 =ax_cbar4.get_axes_locator()
    locator_ax_cbar4.set_bbox_to_anchor ((1.0, 0 , 1, 1),  ax4.transAxes)
    cbar4=plt.colorbar(plot4, cax=ax_cbar4)

    #cbar4.solids.set_rasterization_zorder(-10) # ---> NOT WORKING 
    cbar4.solids.set_rasterized(True)

    ax4.set_title("axes rasterized and zorder changed", fontsize = 10)


    plt.savefig("D:/test_rasterization_3plots.pdf", dpi=150)
    print 'pdf file saved'

    plt.show()

例

どんな提案でも大歓迎です!

4

1 に答える 1

7

これは 1.2.0 と 1.2.1 の間のどこかで修正されたバグです (おそらくこれ: https://github.com/matplotlib/matplotlib/issues/1085、演習として問題を修正したコミットを追跡したままにします)読者のために;))。

最も簡単な解決策は、1.2.1 以降にアップグレードすることです。

于 2013-05-10T13:36:48.297 に答える