4

を使用して保存しているmatplotlib図がありfigure.savefig(path)ます。これにより、キャンバスにある画像がフィギュア内に保存されますが、画像の上に描いた線は保存されません。

これが私の図を作成する方法です:

if new:
    y, x = self.model.get_image_shape()
    self.figure = Figure(figsize=(x*2/72.0, y*2/72.0), dpi=72)
    self.canvas = FigureCanvasWxAgg(self.scroll, -1, self.figure)
    self.canvas.SetBackgroundColour('grey')
self.axes = self.figure.add_axes([0.0, 0.0, 1.0, 1.0])
self.axes.set_axis_off()
self.axes.imshow(self.model.get_image(), aspect='auto')
self.axes.set_autoscale_on(False)
self.mpl_bindings()
y, = self.scroll.GetSizeTuple()[-1:]
iHt, = self.model.get_image_shape()[:-1]
self.aspect = (float(y)/float(iHt)) # zoom factor (0.0 - 1.0)
self.controller.resize_image() # Resizes our figure according to the zoom factor

今、キャンバスにそのまま描画します(draw_artistメソッドを使用):

def draw_polylines(self, adjustable, locked):
    if self.tmp_line: self.axes.draw_artist(self.tmp_line)
    for polyline in self.polylines:
        for line in polyline.lines:
            self.axes.draw_artist(line)
        if adjustable:
            for vertex in polyline.verticies:
                self.axes.draw_artist(vertex)
        self.axes.draw_artist(polyline.label)

これはプログラムですべてうまく機能します(画像の上に線を表示します)が、 を使用しようとするとsavefig()、線ではなく画像のみが保存されます。

画像は次のようになります (PNG に保存した後):

線のある画像

しかし、私はこれを得ています:

保存後(線なし)

これは、図を保存するために私がやっていることです:

self.view.figure.savefig(dialog.GetPath(), dpi=self.view.figure.dpi)

これが私が描いている線ではなく、線が描かれている画像だけを保存している理由はありますか?

ありがとうございました。

編集: ここに SSCCE があります: http://pastebin.com/VQG165k0 (ロードする保存場所と画像を変更するだけです)。

4

1 に答える 1

1

SSCCEありがとうございました。無効animated=Trueにすると、機能します。animation=True が必要な場合は、mpl メーリング リストに問い合わせて、さらに洞察があるかどうかを確認する価値があるかもしれません。

于 2012-07-20T20:34:35.877 に答える