複数の目盛りの設定

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);

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