Makie.jlのAlgebraOfGraphics.jlがとても便利だった。
juliaでグラフを描画するとき、Plots.jlとMakie.jlの2つがある。
最近Makie.jlを使い始めたんだけど、ちょっとかゆいところに手が届かかないというか、Plotsのときののりで書いたら、思い通りいかなかったところがあった。
それが、AlgebraOfGraphics.jlをつかったら一発解決したので、記録しておこうと思う。
Plots.jlでサラッとできてMakieではサラッとできなかったこと
有名なデータセットirisを使って解説する。
Plots.jlの場合
irisのデータをscatterプロットしたときに
Plots.jlを使うと、いとも簡単に色分けされてプロットされる
using Plots,RDatasets,StatsKit
iris = dataset("datasets","iris");
scatter(iris.SepalLength,iris.PetalLength,group=iris.Species)
とするだけで、Species事に色分けされて、それの凡例もさらっとつけてくれる。
Makie.jlの場合
これが、Makieの場合は簡単にいかなくて苦労した。
色々調べて試行錯誤の結果
function myscatter(df; x_var=:x , y_var=:y,color_var=:c)
species = unique(df[:,color_var])
f = Figure()
ax = Axis(f[1,1],
xlabel = string(x_var),
ylabel = string(y_var))
for s in species
scatter!(ax,
iris[iris.Species.==s,x_var],
iris[iris.Species.==s,y_var];
label = s)
end
axislegend(position= :rb)
f
end
using CairoMakie,RDatasets,StatsKit
iris = dataset("datasets","iris");
myscatter(iris,x_var=:SepalLength,y_var=:PetalLength,color_var = :Species)
こんな感じの関数を作って描画するに至った。
いえば、一旦要素ごとにバラバラにして、描画を重ねる。
おそらくPlotsは内部でいい感じにやってくれてるんだと思う。
Makieはデザインがきれいで、色々微調整できる反面、こういう、いい感じにやってくれるってのが難しいのかな?と思っていた。
AlgebraOfGraphics.jlをみつける
Makieのことを少し調べてたらAlgebraOfGraphics.jlってのを見つけた。
ドキュメントを読んでみると、思ってるようなことができそうな予感。
なので、実際にやってみた
using CairoMakie,RDatasets,StatsKit,AlgebraOfGraphics
iris = dataset("datasets","iris");
AlgebraOfGraphics.data(iris)*mapping(:SepalLength,:SepalWidth,color = :Species)|>draw
チュートリアルやexampleをたよりにやってみると
Plotsのときと同じぐらいの手間出できた。
まとめ
AlgebraOfGraphicsはMakieのプロジェクトの中だから、描画処理はMakieがやってるようで、それと組み合わせて色々できるらしい。
そしてメンテナンスも結構やってるので期待。
ggplotのような操作だよーと書いてあった
似たようなのでTidier.jlにあるTidierPlots.jlってのがあって、それはまさにggplotのような操作性を目指してるようだけど、使ってみたけどまだあまりうまくいかなかった。
TidierPlotsも内部はMakieのようなので、今後できるようになるかもしれないけどね。
今後もJuliaに期待。
Discussion