seabornのheatmapをforループ処理するとおかしなことになる

A8バナー広告

問題

こんなコードがあるとする。

このコードを実行すると、下図のような図が保存される。

どういうことー!?なんでカラーバーが乱立してるのー?

原因と解決策

回答はstackoverflowにあった。seabornは部分的にmatplotlibの仕組みを再利用している。カラーバーはまさに再利用に該当する。

つまり、matplotlibの同じpyplotオブジェクトをずーっとforループの中で使いまわしている。なので、カラーバーだけ延々と重ね描写されてしまう。

解決のためには、ループごとに fig, ax = subplot() を作成すればいい。こうすれば、同じplotオブジェクトは利用されない。heatmap = sns.heatmap(data, ax=ax) と、明示的にaxを引数に与えておく。

Python

Posted by user