seabornのheatmapをforループ処理するとおかしなことになる
問題
こんなコードがあるとする。
1 2 3 4 |
for data in data_stack: heat_fig = seaborn.heatmap(data) f = heat_fir.get_figure() f.savefigure(path) |
このコードを実行すると、下図のような図が保存される。

どういうことー!?なんでカラーバーが乱立してるのー?
原因と解決策
回答はstackoverflowにあった。seabornは部分的にmatplotlibの仕組みを再利用している。カラーバーはまさに再利用に該当する。
つまり、matplotlibの同じpyplotオブジェクトをずーっとforループの中で使いまわしている。なので、カラーバーだけ延々と重ね描写されてしまう。
解決のためには、ループごとに fig, ax = subplot()
を作成すればいい。こうすれば、同じplotオブジェクトは利用されない。heatmap = sns.heatmap(data, ax=ax)
と、明示的にaxを引数に与えておく。
ディスカッション
コメント一覧
まだ、コメントがありません