矢印を描く

Last modified: 2019 年 03 月 21 日 00 時

箱ひげ図の全自動スクリプト。定期テストなどで活躍。KeTpic版の焼き直し

主な使用関数: Listplot, Letter, Expr.

箱ひげ図を描く

使い方

hakohige_sample.cdyをダウンロードして、CindyScriptのDraw(figures)

////入力ここから/////////////////////////////////////////////////////////

name=["クラスA", "クラスB", "クラスC"]; //項目名のリスト
title="前期末試験"; //タイトル
Mark=[[17,51.8,70.0,84.3,100,64.9],  //最小値, 1/4, 2/4, 3/4, 最大値, 平均値の順
      [6,40.0,58.0,77.0,94,56.8],
      [6,56.0,71.0,78.5,99,65.6]];

////入力ここまで/////////////////////////////////////////////////////////

Setpen(1);
Setunitlen("16mm");
mult=0.07;
Setscaling(mult);

(略)

の項目名とタイトル、そして、四分位数を入力します。クラス数は2でも、4でも、対応する得点の行列Markが入力されていれば大丈夫です。項目数に応じて、ちゃんと箱ひげ図を作成してくれます。また、平均点を"+"マークに、その横に点数を表示しています。

[このページのトップへ]

サンプルファイルとCindyScriptコード

サンプルファイル(.cdy)のダウンロード
以下はDraw部分のコード:
Ketinit();

////入力ここから/////////////////////////////////////////////////////////

name=["クラスA", "クラスB", "クラスC"]; //項目名のリスト
title="前期末試験"; //タイトル
Mark=[[17,51.8,70.0,84.3,100,64.9],  //最小値, 1/4, 2/4, 3/4, 最大値, 平均値の順
      [6,40.0,58.0,77.0,94,56.8],
      [6,56.0,71.0,78.5,99,65.6]];

////入力ここまで/////////////////////////////////////////////////////////

Setpen(2);
Setunitlen("14mm");
mult=0.07;
Setscaling(mult);

item=length(name);
Letter([item,105],"c",title);
ave=apply(1..(item),x,Mark_(x)_6);
NE.x=2*item+1;
NE.y=100*mult+1;

//箱ひげ
w=0.5;
repeat(item,n,
       L=2*n-1;
       Listplot("box"+text(n),[[L-w,Mark_(n)_2], [L-w,Mark_(n)_4],
                               [L+w,Mark_(n)_4], [L+w,Mark_(n)_2], [L-w,Mark_(n)_2]]); //箱
       Listplot("center"+text(n),[[L-w,Mark_(n)_3], [L+w,Mark_(n)_3]]); //中央値
       Listplot("higeN"+text(n),[[L-w/2,Mark_(n)_1], [L+w/2,Mark_(n)_1]]); //ひげ
       Listplot("higeS"+text(n),[[L-w/2,Mark_(n)_5], [L+w/2,Mark_(n)_5]]); //
       Listplot("bodyN"+text(n),[[L,Mark_(n)_1], [L,Mark_(n)_2]]); //中心線
       Listplot("bodyS"+text(n),[[L,Mark_(n)_4], [L,Mark_(n)_5]]); //
       );

//平均値の印
d=1;
dx=d*mult;
dy=d;
repeat(item,n,
       L=2*n-1;
       Listplot("ave1"+text(n),[[L,Mark_(n)_6-dy],[L,Mark_(n)_6+dy]]);
       Listplot("ave2"+text(n),[[L-dx,Mark_(n)_6],[L+dx,Mark_(n)_6]]);
       Fontsize("ss");
       Expr([L,Mark_(n)_6],"e1.4",text(ave_(n)));
       Fontsize("n");
       );

//外枠
Listplot("frame",[[0,100],[0,0],[2*item,0],[2*item,100]]);

//目盛り
repeat(11,n,
       w=0.8*mult;
       Expr([0,10*(n-1)],"w2",text(10*(n-1)));
       Expr([2*item,10*(n-1)],"e2",text(10*(n-1)));
       Listplot("markL"+text(n),[[-w,10*(n-1)],[w,10*(n-1)]]);
       Listplot("markR"+text(n),[[2*item-w,10*(n-1)],[2*item+w,10*(n-1)]]);
       );
repeat(item,n,
       w=0.8;
       Letter([2*n-1,0],"s2",name_(n));
       Listplot("markD"+text(n),[[2*n-1,-w],[2*n-1,w]]);
       );


Addax(0);

//Figpdf();
Windispg();

//Help("List");

[このページのトップへ]