ujimushi(@旧sradjp(15364))の日記

旧スラドの日記の引越先です

Horizontal bar plots with error bars[勝手に回答]

精神的にバタバタしていてなかなか書けなかった日記。少し落ち着いたので 「勝手に回答」をしてみたいと思います。

今回は,Horizontal bar plots with error bars。いつものJulia Discourseからの質問です。

正直,微妙にバグっぽい挙動ですが,仕方がないような気もします。 と言いつつ,実はVersion 2ではorientation=:hは未実装のようです。 危険な香り…

と,言いつつ対策を書いてみます。

とりあえずバーのグラフを書いて,エラーバーの描画を上書きしてごまかす方針です。

using Plots, Distributions
labels = ["aaa","bbb","ccc"]
values = [10,8,7]
sd     = [2.2,0.8,1.5]
n      = 30
errors = quantile(Normal(0,1),0.975) .* sd ./ sqrt(30)

# 後で利用するためlabelsのインデックスを変数に
idxs = eachindex(labels)

# y軸の上下限をインデックスから算出
bar(values, orientation=:h, yticks=(idxs, labels),
    ylims = idxs[[begin, end]] + [-0.5, 0.5])

# エラーバーを邪魔しない形の点グラフを描画
scatter!(values, idxs, xerror=errors,
         markershape=:cross, markercolor=:black, label="")

savefig("HBar_with_EBar.png")

とりあえずは小手先の対応ですが,見かけはうまくごまかせてそうな気がします。

追記

同じタイトルでググるmatlabとかでも質問があって解決策に別のエラーバーのグラフで上書きしているのを見かけるので, 別のプロットで上書きというのは自分が思っているよりは一般的な方法なのかもしれません。

更に追記

何と。orientation=はdeprecatedなのでpermuteを使えとある。

bar(labels, values, permute=(:x,:y), yerror=errors)のような感じで,x軸とy軸を入れ換えてプロットできるようです。早速日記のアトリビュート一覧の方も変更しておこう。