1. ホーム
  2. python

[解決済み] Matplotlib のプロットから線を削除する方法

2023-02-06 17:45:37

質問

どのようにしたら、実際にガベージコレクションを受けてメモリを解放するような方法で、matplotlibの軸の線(または線)を削除することができますか? 以下のコードは、行を削除するように見えますが、決してメモリを解放しません (たとえ、明示的に gc.collect() )

from matplotlib import pyplot
import numpy
a = numpy.arange(int(1e7))
# large so you can easily see the memory footprint on the system monitor.
fig = pyplot.Figure()
ax  = pyplot.add_subplot(1, 1, 1)
lines = ax.plot(a) # this uses up an additional 230 Mb of memory.
# can I get the memory back?
l = lines[0]
l.remove()
del l
del lines
# not releasing memory
ax.cla() # this does release the memory, but also wipes out all other lines.

では、軸から1行だけ削除して、メモリを取り戻す方法はあるのでしょうか? この潜在的な解決策 もうまくいきません。

どのように解決するのですか?

の組み合わせで表示しています。 lines.pop(0) l.remove()del l はトリックを行います。

from matplotlib import pyplot
import numpy, weakref
a = numpy.arange(int(1e3))
fig = pyplot.Figure()
ax  = fig.add_subplot(1, 1, 1)
lines = ax.plot(a)

l = lines.pop(0)
wl = weakref.ref(l)  # create a weak reference to see if references still exist
#                      to this object
print wl  # not dead
l.remove()
print wl  # not dead
del l
print wl  # dead  (remove either of the steps above and this is still live)

大きなデータセットを確認したところ、システムモニター上でもメモリの解放が確認できました。

もちろん、より簡単な方法 (トラブルシューティングでない場合) は、リストからそれをポップアップして remove を呼び出すことでしょう。

lines.pop(0).remove()