#==========
Julia の修行をするときに,いろいろなプログラムを書き換えるのは有効な方法だ。
以下のプログラムを Julia に翻訳してみる。
S の plot.design 関数
http://aoki2.si.gunma-u.ac.jp/R/plot-design.html
ファイル名: plotdesign.jl 関数名: plotdesign
翻訳するときに書いたメモ
! で重ね描きできるのは便利。
==========#
using DataFrames, Statistics, Plots
function plotdesign(data; FUN=mean)
nv = size(data, 2)
pyplot()
name = names(data)
p = plot(xlims=(1.5, nv+0.5), ylabel=name[1], yguidefontsize=14,
tick_direction=:out, grid=false, label="")
minx, maxx = Inf, -Inf
for i in 2:nv
gd = groupby(data, i)
a = combine(gd, 1 => FUN)
x = repeat([i], size(a, 1))
plot!(x, a[:, 2], color=:black, label="")
scatter!(x, a[:, 2], color=:red, label="")
for j = 1:length(x)
minx = min(minx, a[j, 2])
maxx = max(maxx, a[j, 2])
annotate!(x[j], a[j, 2], text(" " * a[j, 1], 12, :left), label="")
end
end
w = (maxx - minx) * 25/400
xticks!(2:nv, name[2:nv], xtickfontsize=14,
ylims=(minx - w, maxx + w))
end
using Random;
Random.seed!(123);
n = 50
value = randn(n) .* 10 .+ 100;
gender = rand(["male", "female"], n);
area = rand(["rural", "urban"], n);
density = rand(["hi", "med", "lo"], n);
dist = rand(["a", "b", "c", "d", "e"], n);
# 第1列に連続変数,2列目以降にカテゴリー変数
data = DataFrame(:value => value, :gender => gender, :area => area,
:density => density, :dist => dist);
plotdesign(data)
plotdesign(data[:, 1:3])