複数の目盛りの設定
Last modified: 2018 年 12 月 30 日 03 時
目盛りを複数設定して、原点を任意に設定します
主な使用関数: Htickmark, Setcolor, Setmarklen, Setorigin, Vtickmark.
データの用意
ここで例として、奈良県奈良市のアメダスのデータを元に、グラフを描いてみます。参照データは奈良県奈良の気候(気温と降水量のグラフ(雨温図))です。月毎の最高気温・平均気温・最低気温・降水量のデータを描き込みます。データは次のように用意します:
maxtemp=[ 8.7, 9.6, 13.4, 19.8, 24.1, 27.2,..
30.8, 32.6, 28.2, 22.2, 16.5, 11.4];
meantemp=[ 3.9, 4.4, 7.6, 13.4, 18.0, 21.9,..
25.8, 26.9, 22.9, 16.6, 11.1, 6.2];
mintemp=[-0.2, -0.1, 2.3, 7.4, 12.5, 17.5,..
21.8, 22.6, 18.8, 12.1, 6.4, 1.9];
rain=[ 49.6, 63.3, 103.2, 97.7, 143.5, 188.8,..
165.1, 111.8, 163.3, 111.1, 71.4, 47.3];
Rain=list(); // 降水量のデータの縮尺を調整する
for i=1:12
Rain($+1)=-20+rain(i)/100*10;
end
// 各データを[月,量]のリストに
data_max=list();
for i=1:12
data_max($+1)=[i, maxtemp(i)];
end
data_mean=list();
for i=1:12
data_mean($+1)=[i, meantemp(i)];
end
data_min=list();
for i=1:12
data_min($+1)=[i, mintemp(i)];
end
data_rain=list();
for i=1:12
data_rain($+1)=[i, Rain(i)];
end
ここで、気温と降水量は単位が違いますから、降水量の数値の大きさを調整して、Rainとしています。
また、グラフの縦横比をSetscaling、軸の目盛りの長さをSetmarklenで調節します。さらに、気温のデータの下限を-20℃としたいので、原点を(0.5,-20)に移します:
Setwindow([0.5,12.5], [-20,40]);
Setscaling(0.25); // 縦横比を縱0.8:橫1に
Setorigin([0.5, -20]); //原点を(0.5, -20)に定める
Setmarklen(3); // 軸の目盛りの単位長さを3倍に
Setorigin(点の座標)で、点の座標に原点を移します。すなわち、座標軸の交点がここで設定した点になります。
[このページのトップへ]
グラフの用意
用意したデータを元に、グラフのプロットデータを用意します。最高気温・平均気温・最低気温は折れ線に、降水量は棒グラフにしてみます。
// 気温の折れ線グラフを作る
G_max=Listplot(data_max);
G_mean=Listplot(data_mean);
G_min=Listplot(data_min);
LL=list();
for i=1:6
LL($+1)=Listplot([Xmin(), -20+10*i], [Xmax(), -20+10*i]);
end
L=Listplot([Xmax(), Ymin()], [Xmax(), Ymax()]);
// 降水量の棒グラフの矩形を作る
RR=list();
for i=1:12
RR($+1)=Listplot([i-0.5, Ymin()], [i+0.5, Ymin()],..
[i+0.5, Rain(i)],..
[i-0.5, Rain(i)],..
[i-0.5, Ymin()]);
end
Listplotにより、各i月に対し、縦Rain(i)横1の矩形を作って、リストRRとします。また、Xmin(), Xmax()はそれぞれ、Setwindowで設定したxの最小値・最大値を表します。Ymin(), Ymax()も同様です。
[このページのトップへ]
目盛りの設定
左の縦軸の目盛りには、気温として、下から-20,-10,...,40と振ることにします。
縦軸の目盛り(気温)を付けるのは、Beginpicture以下で、Vtickmark(数値, 'ラベル')により数値のところに目盛り(目印)とラベルを入れます。ただし、今の場合、5℃ごとに目印を振りたいので、Vtickmarkを使い先に目盛りだけ付けて、次にExprを使って、10℃ごとにラベルをつけています:
Openfile('tex/tick_mark2_sample.tex');
Beginpicture('0.5cm');
....(中略)
// 目盛りを付ける
for i=0:12
Vtickmark(-20+5*i, ' '); // 左縦軸の目盛りを入れる
end
for i=0:6
Expr([Xmin(), -20+10*i], 'w2', string(-20+10*i)); // 数値
end
さらに、右端に降水量の目盛りを100,200,...,600と振ります。これには、Setoriginを使って、一旦、右下の地点(12.5,-20)を原点とし、Vtickmarkで目盛りを振ってから元の位置に原点を戻すということをします:
Setorigin([12.5, -20]); // 一旦原点を右下(12.5,-20)に移して
for i=0:12
Vtickmark(-20+5*i, ' '); // 右縦軸の目盛りを入れる
end
Setorigin([0.5, -20]); // 原点を(0.5, -20)に戻す
for i=0:6
Expr([Xmax(), -20+10*i], 'e2', string(100*i)); // 右縦軸の目盛り
end
横軸の目盛りは、月なので、原点の次から,1,2,...,12と振ります。
for i=1:12
Htickmark(i, string(i)); // 横軸の目盛り
end
[このページのトップへ]
ソースコード
scilabファイル(.sce)のダウンロード
Setwindow([0.5,12.5], [-20,40]);
Setscaling(0.25); // 縦横比を縱0.8:橫1に
Setorigin([0.5, -20]); //原点を(0.5, -20)に定める
Setmarklen(3); // 軸の目盛りの単位長さを3倍に
maxtemp=[ 8.7, 9.6, 13.4, 19.8, 24.1, 27.2,..
30.8, 32.6, 28.2, 22.2, 16.5, 11.4];
meantemp=[ 3.9, 4.4, 7.6, 13.4, 18.0, 21.9,..
25.8, 26.9, 22.9, 16.6, 11.1, 6.2];
mintemp=[-0.2, -0.1, 2.3, 7.4, 12.5, 17.5,..
21.8, 22.6, 18.8, 12.1, 6.4, 1.9];
rain=[ 49.6, 63.3, 103.2, 97.7, 143.5, 188.8,..
165.1, 111.8, 163.3, 111.1, 71.4, 47.3];
Rain=list(); // 降水量のデータの縮尺を調整する
for i=1:12
Rain($+1)=-20+rain(i)/100*10;
end
// 各データを[月,量]のリストに
data_max=list();
for i=1:12
data_max($+1)=[i, maxtemp(i)];
end
data_mean=list();
for i=1:12
data_mean($+1)=[i, meantemp(i)];
end
data_min=list();
for i=1:12
data_min($+1)=[i, mintemp(i)];
end
data_rain=list();
for i=1:12
data_rain($+1)=[i, Rain(i)];
end
// 気温の折れ線グラフを作る
G_max=Listplot(data_max);
G_mean=Listplot(data_mean);
G_min=Listplot(data_min);
LL=list();
for i=1:6
LL($+1)=Listplot([Xmin(), -20+10*i], [Xmax(), -20+10*i]);
end
L=Listplot([Xmax(), Ymin()], [Xmax(), Ymax()]);
// 降水量の棒グラフの矩形を作る
RR=list();
for i=1:12
RR($+1)=Listplot([i-0.5, Ymin()], [i+0.5, Ymin()],..
[i+0.5, Rain(i)],..
[i-0.5, Rain(i)],..
[i-0.5, Ymin()]);
end
Openfile('tex/tick_mark_sample2.tex');
Beginpicture('0.6cm');
// 座標軸のラベルの設定
Setax('', ' ', 'e2',..
'\text{気温}', 'n6', ' ', 's2w');
Drwline(LL, 0.5); // 補助線
Drwline(L, 2); // 右端の線分
// 気温のプロット
Setpen(5);
Setcolor('red', 1);
Drwline(G_max, 1.5);
Drwpt(data_max);
Setcolor('green', 1);
Drwline(G_mean, 1.5);
Drwpt(data_mean);
Setcolor('blue', 1);
Drwline(G_min, 1.5);
Drwpt(data_min);
Setcolor('black', 1);
Setpen(1);
// 降水量のプロット
Setcolor('cyan', 1);
for i=1:12
Shade(RR(i), 0.1); // 塗りつぶしの濃さを0.1にしてみる
end
Setcolor('black', 1);
Drwline(RR, 1);
// 目盛りを付ける
for i=0:12
Vtickmark(-20+5*i, ' '); // 左縦軸の目盛りを入れる
end
for i=0:6
Expr([Xmin(), -20+10*i], 'w2', string(-20+10*i)); // 数値
end
Setorigin([12.5, -20]); // 一旦原点を右下(12.5,-20)に移して
for i=0:12
Vtickmark(-20+5*i, ' '); // 右縦軸の目盛りを入れる
end
Setorigin([0.5, -20]); // 原点を(0.5, -20)に戻す
for i=0:6
Expr([Xmax(), -20+10*i], 'e2', string(100*i)); // 右縦軸の目盛り
end
for i=1:12
Htickmark(i, string(i)); // 横軸の目盛り
end
Expr([Xmax(), Ymax()], 'n6', '\text{降水量}');
Expr([6.5,45], 'c', '\text{\large 奈良の気候}');
Expr([6.5,-25], 'c', '\text{月}');
Setpen(2);
Endpicture(1);
Closefile();
Setpen(1);
Setscaling(1);
[このページのトップへ]