目的

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

するのはグローバルな操作している気がしてキモチワルイ...
性能の都合なのかライブラリの都合なのかはわからないけど、なんとなくリソースの問題なのかなって気がしている