裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

Julia に翻訳--018 S の plot.design 関数

2021年03月03日 | ブログラミング

#==========
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])

コメント    この記事についてブログを書く
  • Twitterでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« Julia に翻訳--017 ROC 曲線... | トップ | Julia に翻訳--020 シンプレ... »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事