ベイズモデリングでMCMCの結果をArviZのトレースプロットで表示する際、体裁が狙い通りならないことがありました。解決方法を備忘録として残しておきます。
前提
以下の記事相当の処理をしている前提で、最後のトレースプロットのセル部分に関する話です。
Google ColaboratoryでPyStanをいじくる - 雑記 in hibernation
デフォルトで出力した場合
とりあえずデフォルトで出力してみます。
fig = arviz.plot_trace(fit)
イマイチなポイントは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。あれ??????????????????
おわりに
ちょっと気持ち悪いですが、以上、備忘録でした。