Hatena::ブログ(Diary)

西尾泰和のはてなダイアリー

2011-11-11

matplotlib.patches.Circleのオプション引数fillが機能していない疑惑

下のコードでfill=Falseをしているにもかかわらず「青く塗られた円」が描かれる。

from matplotlib.collections import PatchCollection
from pylab import *
def draw():
    clf()
    circles = [Circle(random(2), radius=random(), fill=False)]
    gca().add_collection(PatchCollection(circles))
    matplotlib.pyplot.savefig('test.png')

numpy.__version__ == '1.6.1'

matplotlib.__version__ == '1.0.1'

pdbのステップ実行で追いかけて行ったらmatplotlib.backends.backend_agg.RendererAggのbuilt-in method draw_path_collectionに入ってしまったのでそこで面倒になってしまった。

(Pdb) print renderer
<matplotlib.backends.backend_agg.RendererAgg instance at 0x103fd0290>
(Pdb) print renderer.draw_path_collection
<built-in method draw_path_collection of tuple object at 0x103ebfb00>


追記:

結論としてはfillは機能しています。

gca().add_collection(PatchCollection(circles))でfillされてしまっている模様。

gca().add_collection(PatchCollection(circles, facecolor='none'))でfillされなくなります。

このコメントを元に調べてみたところ、PatchCollectionはデフォルトでCircleで指定した色を上書きしてしまうということがわかりました。

Definition:PatchCollection(self, patches, match_original=False, **kwargs)
(snip)    
    *match_original*
        If True, use the colors and linewidths of the original
        patches.  If False, new colors may be assigned by
        providing the standard collection arguments, facecolor,
        edgecolor, linewidths, norm or cmap.

hogehoge 2011/11/12 18:29 結論としてはfillは機能しています。
gca().add_collection(PatchCollection(circles))でfillされてしまっている模様。
gca().add_collection(PatchCollection(circles, facecolor='none'))でfillされなくなります。

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

リンク元