Pythonできれいな散布図+イテレーションごとの変化過程+ラベル表示 を描くために?(コードつき)
目次
この記事を読んでわかること

時系列と共に変化する散布図を描きたい人にオススメです。
コード
Python3.7で実行しました。
コードの解説
前回にこんな記事を書きました。この記事に入ってないことは前回の記事を。
legendを表示しない
まずlegendを表示しないことにします。seabornのscatterplotメソッドの引数を変更するだけです。
legendを手動作成する
legendを手動作成してしまうのがもっとも簡単だと判断しました。
matplotlib.patches.matchesメソッドを使えば、実現できます。
イテレーションの途中だけを選択する
散布図は最大10個までの表示に決めました。縦にながすぎる画像を見たい人は多くないでしょう。
最適化アルゴリズムで大切なところは、最初と最後と途中だと思います。
ということで、途中をランダムサンプリングします。最終的に10個におさまるようにしました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
if len(x_tensor) > 10: seq_plot_range = [0] __i = 0 while __i <= 7: seq_plot_range.append(random.choice(range(1, len(x_tensor) - 2))) __i += 1 else: seq_plot_range.append(len(x_tensor) - 1) n_plot_max = 10 else: seq_plot_range = list(range(0, len(x_tensor))) n_plot_max = len(x_tensor) |
この記事を書こうと思ったきっかけ
前回のコードで描いた最適化の様子を人に見せることになりました。
で、最適化の変化具合を探るためにイテレーション数を増やしたんですね。するとこのとおり・・・

これには「うわっ、私のグラフ、汚すぎ・・・」という気持ちを隠しきれません。

そこで、次の2つ対策をすることにしました。
- legend表示を1つだけにする。
- 最適化途中で最初と途中と最後の見せる。ぜんぶあわせて10個のグラフに限定する。
この改修が5分程度でおわるだろうと思ったら1時間近くかかりました。
もう忘れないようにするために記事にしました。
ディスカッション
コメント一覧
まだ、コメントがありません