ggplot2 の入門ということで定番の図であるが,
https://data-viz-lab.com/ggplot2
にも以下の図がある。
書くのは簡単だよと
> plot <- ggplot(data = data_iris,
+ mapping = aes(x=Sepal.Length,
+ y=Petal.Length)) +
+ geom_point(aes(colour=Species)) +
+ geom_smooth(method = "lm",
+ colour="pink")
> plot
が挙げられているが,なんか知らないが,データフレームを専用に変換しないといけないとかで,事前にいかが必要とのこと。
> # データセットのリストを作成
> l <- data()
> results <- l$results %>%
+ as.data.frame()
> list <- results$Item
>
> # ループ処理でデータセットをデータフレーム型に変換
> for (i in list) {
+ data <- try(get(i), silent = TRUE) %>% # Use try function to ignore errors
+ try(as.data.frame(), silent = TRUE)
+ if (is.data.frame(data)==TRUE) {
+ name <- paste0("data_", i)
+ assign(name, data)
+ } else {
+ }
+ }
Julia でなるべく汎用性をもたせるように関数を書いてみた。
using Plots
using DataFrames, GLM
function scatterplot(df; xlabel="", ylabel="", grouplabel="", col=:black, conflevel=0.95)
gr( tick_direction=:out,
grid=false,
markerstrokewidth=0,
alpha=0.4,
fontfamily="serif",
guidefontfamily="times",
guidefontsize=8,
label="")
df2 = DataFrame(x=df[:,1], y=df[:,2])
model = lm(@formula(y ~ x), df2);
minx, maxx = extrema(df2.x)
pred = DataFrame(x=range(minx, maxx, length=500));
pr = predict(model, pred, interval=:confidence, level=conflevel);
p = scatter(df2.x,
df2.y,
color=col,
xlabel=xlabel,
yaxis=ylabel);
plot!( pred.x,
pr.prediction,
linecolor=:red,
linewidth=2,
color=:gray,
ribbon=(pr.prediction .- pr.lower,
pr.upper .- pr.prediction))
for gl in grouplabel
annotate!(gl[1],
gl[2],
text(gl[3],
"times",
8,
gl[4]))
end
p
end
scatterplot() にあたえるのは,2列のデータフレーム(一応,1列目が x 軸,2列目が y 軸に対応するものとしておく)
キーワード引数は
x, y 軸の名前 xlabel="", ylabel="",
各グループのアノテーションのタプル (x 座標,y 座標,グループの名前,文字色)のベクトル grouplabel="",
グループを表示する色 col=:black,
信頼限界帯の信頼率 conflevel=0.95
最低限では2列のデータフレームを渡すだけ。
using RDatasets
iris = dataset("datasets", "iris");
palette = [:red, :green, "blue"];
col = repeat(palette, inner=50);
scatterplot(iris[:, [:SepalLength, :PetalLength]])
先程のサイトと同じように描くときは
scatterplot(iris[:, [:SepalLength, :PetalLength]],
xlabel="Sepal Length",
ylabel="Petal Length",
grouplabel=[(5.5, 2.2, "Setosa", :red),
(6.5, 3.8, "Versicolor", :green),
(6.0, 6.4, "Virginica", :blue)],
col=col)
まあ,ggplot() が scatterplot() に相当するのだから,scatterplot() の呼び出しが 7 行(実質は 2, 3 行)というのはむしろ短い。汎用性もあるし。
出来上がった図は,好みの差もあるが Julia に軍配があがるだろう。
※コメント投稿者のブログIDはブログ作成者のみに通知されます