目的
pandasであるデータの一覧を読み込んでいって散布図的なものを出力するってことを下記のような感じで行った結果、下記のエラーが出力された
/home/vm/.local/share/virtualenvs/***/lib/python3.6/site-packages/matplotlib/pyplot.py:514: RuntimeWarning: More than 20 figures have been opened. Figures created through the pyplot interface (`matplotlib.pyplot.figure`) are retained until explicitly closed and may consume too much memory. (To control this warning, see the rcParam `figure.max_open_warning`).
max_open_warning, RuntimeWarning)
問題のコードは次のとおり
df = pd.read_csv(index_file, sep='\t', header=None)
for src in df[0]:
src_table = pd.read_csv('hoge.tsv', sep='\t', header=None)
src_table.plot.hexbin(x=0, y=1, gridsize=15, sharex=False)
....
ちなみに数が少なければ再現しない
解決策
matplotlib.close()
するだけ
つまり
df = pd.read_csv(index_file, sep='\t', header=None)
for src in df[0]:
src_table = pd.read_csv('hoge.tsv', sep='\t', header=None)
src_table.plot.hexbin(x=0, y=1, gridsize=15, sharex=False)
plt.close()
で解決する
課題
matplotlibのcloseの中身まで読んでないのでどうなっているかはわからないが、
pandas.dataframe.plot.hexbin
を叩いたのだから
pandas.dataframe.plot.hexbin.close
もしくは
pandas.dataframe.plot.close
とあるほうがしっくりくるのだが...
いきなり
matplotlib.close
するのはグローバルな操作している気がしてキモチワルイ...
性能の都合なのかライブラリの都合なのかはわからないけど、なんとなくリソースの問題なのかなって気がしている