2011-07-14 5 views
1

matplotlibの軸の中で矩形をレンダリングしたい。軸は原点が左下隅にある単位正方形です。矩形が軸と同じサイズの場合、矩形をあたかも軸の境界線のように見せたいです。Matplotlibの軸の境界で不適切なレンダリング

問題は、レンダリングが間違っているように見えることです。矩形の左(x = 0)と上(y = 1)は表示されますが、下(y = 0)と右(x = 1)は表示されません。

注:これは四角形にのみ限定されているわけではありません。

Improper rectangle rendering.

次のコードスニペットは、問題を示しています:結果として得られたレンダリングが表示されます

import matplotlib.pyplot as mpl 

r = mpl.Rectangle((0,0), 1, 1, edgecolor='red', facecolor='none', zorder=100) 

axes = mpl.gca() 
axes.add_patch(r) 
axes.set_xbound(0, 1) 
axes.set_ybound(0, 1) 

axes.get_xaxis().set_visible(False) 
axes.get_yaxis().set_visible(False) 

[spine.set_visible(False) for spine in axes.spines.values()] 

mpl.show() 

私もPDFにレンダリングし、これが正しく動作することを確認しているが(例えば、すべての側面にズームするとき存在しています)。

これは、下にあるイメージが画面にどのようにラスタライズされるかと一見関係があります。この問題を回避する方法はありますか?

答えて

2

正確な動作は、あなたの矩形のオフクリッピングオンにした場合、あなたはどのバックエンドにしたいと、それは振る舞うべき、しかしバックエンド依存(あなたは私のシステム上にそれを好きなあなたの例では、動作します。)

です。

上記の例では、ちょうどr.set_clip_on(False)を実行してください。

import matplotlib.pyplot as plt 

r = plt.Rectangle((0,0), 1, 1, edgecolor='red', facecolor='none', zorder=100) 

ax = plt.gca() 
ax.add_patch(r) 
ax.axis([0, 1, 0, 1]) 

ax.xaxis.set_visible(False) 
ax.yaxis.set_visible(False) 

[spine.set_visible(False) for spine in ax.spines.values()] 

r.set_clip_on(False) 

plt.show() 

enter image description here

+0

おかげでジョー。あなたの解決策は理にかなっており、私の問題を解決します。しかしこれは2つの他の質問をする。これは私のバックエンドのバグですか?と思われる。次に、クリッピングの違いは何ですか?描画には少し効率が悪いですか?私は多くのアニメーションをやっているので、私は尋ねるだけです。 – Rocketman

+0

@Rocketman - バグかどうか分かりません。あなたはユーザーのリストを尋ねることができ、おそらく私があなたに与えることができるよりもはるかに良い答えを得ることができます。 2番目の場合:私は単純なケースでは、クリッピングがアニメーションの速度に多大な影響を与えるとは考えていません(??)。 (まだblitzを使用していない場合は、matplotlibページにいくつかのチュートリアルがあります。) –