Plots.jl+StatsPlots.jlでDataFrameを可視化する
versioninfo()
# Julia Version 1.2.0
# Commit c6da87ff4b (2019-08-20 00:03 UTC)
# Platform Info:
# OS: macOS (x86_64-apple-darwin18.6.0)
# CPU: Intel(R) Core(TM) i7-6700K CPU @ 4.00GHz
# WORD_SIZE: 64
# LIBM: libopenlibm
# LLVM: libLLVM-6.0.1 (ORCJIT, skylake)
using RDatasets # v0.6.6
using Plots # v0.28.4
using StatsPlots # v0.13.0
gr(); # 今回バックエンドはGR
Rのggplot2
やPythonのSeaborn
ではデータフレームの中身を可視化する際、データフレームを数値ベクトルに変換せず列名を指定してあげるだけで簡単にグラフを作る関数があります。もちろんそれらをJuliaから呼び出すこともできますが、せっかくなので今回はPlots.jl
とStatsPlots.jl
でRやPythonと同様にデータフレームを簡単に可視化してみたいと思います。
@df
マクロ
Plots.jl
のplot()
関数はDataFrame
を引数にとることができないのですが、StatsPlot.jl
の@df
マクロを組み合わせてあげることでデータフレームの列名でデータをplot()
関数に渡すことができます。例として今回はiris
のDataFrameを使います。Rユーザーにはおなじみですね。
各Species
ごとにグループ化された散布図を見たければ以下のように書きます。この場合:SepalLength
がX軸、:SepalWidth
がY軸になります。
iris = dataset("datasets", "iris")
@df iris scatter(:SepalLength, :SepalWidth, group=:Species)
ちなみに@df
マクロを使わない場合は
scatter(iris[!,:SepalLength], iris[!,:SepalWidth], group=iris[!,:Species])
でも同じグラフが出力できます。
ちょっと凝ったグラフも@df
マクロとStatsPlots.jl
の関数の組み合わせでで以下のように簡単に作れます。
stack(iris) |>
df -> @df df groupedboxplot(:variable, :value, group=:Species, xtickfontsize=11, bar_width=0.5)
ところで上のgroupedboxplot
ってドキュメントのどこにも載ってないですよね…。(たまたまソースを読んでて見つけたので使ってみました)