雑記 in hibernation

頭の整理と備忘録

ArviZの体裁で引っかかったところメモ

ベイズモデリングMCMCの結果をArviZのトレースプロットで表示する際、体裁が狙い通りならないことがありました。解決方法を備忘録として残しておきます。

前提

以下の記事相当の処理をしている前提で、最後のトレースプロットのセル部分に関する話です。

Google ColaboratoryでPyStanをいじくる - 雑記 in hibernation

デフォルトで出力した場合

とりあえずデフォルトで出力してみます。

fig = arviz.plot_trace(fit)

イマイチなポイントは2点。

  1. 上のグラフの目盛と下のグラフのタイトルの文字が被っている → 被らないように体裁を整えたい

  2. グラフ中の各プロットが実線、破線で凡例分けされている → 見づらいので色分けにしたい。


対策

上記2点に対して取った対策は以下です。一応これらの対応で解決しました。

1. グラフの文字を被らないようにするには

結論から言うと、以下のような感じでいけます。

fig = arviz.plot_trace(fit, backend_kwargs={"constrained_layout":True})

arvizの裏で動いているmatoplotlibのpyplot.subplots()に対して、backend_kwargsで引数を渡すことができます(公式ドキュメント参照)。そしてsubplots()の体裁は”constrained_layout”で整えられるらしいので、それに従ってパラメータを渡します(こちら参照)。


2. 凡例を色分けするには

結論から言うと、以下のような感じでいけます。

fig = arviz.plot_trace(fit, compact=False, backend_kwargs={"constrained_layout":True})

正直、なぜこれでいけるのかちゃんとは理解できていないです。

"compact=True"の場合色分けがなされないらしく(こちら参照)、最新のバージョンではデフォルトで"False"となっているので問題にはならないようです。と言うことは、おそらく僕の環境ではGoogle ColabにデフォルトでインストールされているArviZバージョンが古かったので、"compact=True"がデフォルトとなっていたのでしょう。と思って調べてみたら、22年5月現在で最新のバージョンは0.12.1。Google Colabにインストールされているバージョンも0.12.1。あれ??????????????????

おわりに

ちょっと気持ち悪いですが、以上、備忘録でした。