2012-12-11 4 views
7

小さなパッチオブジェクトをmatplotlibにプロットすると、ディスプレイの解像度によってアーチファクトが発生します。アンチエイリアスを使用しても問題は解決しません。matplotlibパッチプロッティングのアーティファクト

この問題を解決する方法はありますか?

import matplotlib.pyplot as plt 
import matplotlib.patches as patches 

ax = plt.axes() 

for x in range(-10,11): 
    for y in range(-10,11): 
     rect = patches.Rectangle((x, y), width=0.1, height=0.1, color='k',aa=True) 
     ax.add_patch(rect) 

plt.xlim([-30, 30]) 
plt.ylim([-30, 30]) 
plt.show() 

output

+1

私もこの問題を抱えています。これはインタラクティブなセッションには役立ちませんが、画像をベクトル化されたフォーマット、つまり 'plt.save(" a.pdf ")'に保存すると価値があります。結果のpdfには同じアーティファクトがありません。 – Hooked

+0

'ec = 'none''を設定すると少し助けになるかもしれません。' rect = patches.Rectangle((x、y)、width = 1、height = 1、color =' k '、ec =' none ') ' –

+0

私はこの問題を再現できませんでした。 OS Xでmatplotlib 1.1.1を使ってpngとjpgとして保存しました。結果は正常でした。 – tiago

答えて

3

問題の簡単な例を一緒に入れてくれてありがとう - それは本当にはるかに簡単にこれを調査します!

この問題を解決する方法はありますか?

はい、あります。私の最初の推測では、添付した画像を見るだけで、奇妙なクリッピング/スナップが起こっていたということでした。アンチエイリアスの可能性を除外して(私が指定したスイッチをフリックすることによって)、私の唯一のテスト方法は、 "snap"キーワードをfalseに設定することでした(スナップメソッドの非常に限られたドキュメントについてはhttp://matplotlib.org/api/artist_api.html#matplotlib.artist.Artist.set_snap参照)。スナップの設定

は、トリックを行い、あなたが期待する結果に終わる:

import matplotlib.pyplot as plt 
import matplotlib.patches as patches 

ax = plt.axes() 

for x in range(-10,11): 
    for y in range(-10,11): 
     rect = patches.Rectangle((x, y), width=0.1, height=0.1, 
           color='k', snap=False) 
     ax.add_patch(rect) 

plt.xlim([-30, 30]) 
plt.ylim([-30, 30]) 
plt.show() 

視覚的な比較(おそらく最良のブラウザとして新しいウィンドウで画像を開くと、おそらく画像を拡大縮小し、さらにご紹介します視覚効果):

comparison of the snap property

私はMPLでのスナッププロパティについて、これが本当に望ましい行動であるかどうか、特に精通していないので、私は、MPL-develのに質問を投稿しますメーリングリストを開き、この質問に関する会話を開きます。うまくいけば、この回答があなたを助けてくれるはずです。

関連する問題