/ python

pythonでpandasからmatplotlibで散布図を作ろうとしたら警告が出る問題の対処

目的

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

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

zienchan

zienchan

ハードウェアからソフトウェアまで広範囲で何か作ってます

Read More
pythonでpandasからmatplotlibで散布図を作ろうとしたら警告が出る問題の対処
Share this