ジュリアでボックスプロットを描く方法
日本語訳
説明
ボックスプロットを描くには、統計的可視化パッケージであるStatsPlots.jl
を使用する必要がある。
boxplot([data], labels=[label])
コード
using StatsPlots
x = rand(0:100, 100)
y = rand(50:100, 100)
z = cat(x,y, dims=1)
boxplot(x, label="x")
boxplot!(y, label="y")
boxplot!(z, label="z")
または、boxplot([x,y,z], label=["x" "y" "z"])
も同じ図を描く。lable
にはコンマがないことに注意しよう。つまり、$3 \times 1$ベクターではなく、$1 \times 3$配列である必要がある。
x軸の目盛り
文字列でx軸の目盛りを表したい場合、
boxplot([x, y, z], xticks=(1:3, ["x", "y", "z"]), label=["x" "y" "z"])
または、以下のコードも同じ図を描く。違いは、実際の座標がどうなっているかだ。上のコードでは、実際に各ボックスが描かれるx座標が1, 2, 3だが、グラフの目盛り値だけx, y, zと見えるように変えたものだ。下のコードは、実際に"x", “y”, “z"の座標上にボックスを描く。
2次元配列で描く
a = rand(100, 3)
boxplot(a, xticks=(1:3, ["x", "y", "z"]), label=["x" "y" "z"])
データフレームで描く
データフレームそのもので描くことはできず、配列に変換する必要がある。
using MLDatasets
using DataFrames
df = Iris().features
boxplot(Array(df), xticks=(1:4, names(df)), label=reshape(names(df), (1,4)))
平均
平均を表示するオプションは別にない。scatter
で打ってみよう。
using Statistics
boxplot(fill("x", length(x)), x, labels="x")
boxplot!(fill("y", length(y)), y, labels="y")
boxplot!(fill("z", length(z)), z, labels="z")
scatter!(["x", "y", "z"], [mean(x), mean(y), mean(z)], color=palette(:default)[1:3], label="")
または、次のコードも同じ図を描く。
boxplot([x, y, z], xticks=(1:3, ["x", "y", "z"]), label=["x" "y" "z"])
scatter!([1, 2, 3], [mean(x), mean(y), mean(z)], color=palette(:default)[1:3], label="")
環境
- OS: Windows11
- Version: Julia 1.9.0, Plots v1.38.12, StatsPlots v0.15.5, DataFrames v1.5.0, MLDatasets v0.7.11