目盛りの設定

Last modified: 2018 年 12 月 30 日 03 時

目盛りを自由に設定します

主な使用関数: Htickmark, Vtickmark.

目盛りの設定

データの用意

1790~1980年の間のアメリカの人口増加のグラフとロジスティック曲線の比較を例にします(詳しくは、2015年度の微分積分学IIのレポート問題解答を参照してください)。データは以下を入力してください:

Setwindow([0,21], [0,23]);
Setscaling(0.8);  // 縦横比を縱0.8:橫1に

data=[[ 0,   3.9*10^6], [ 1,   5.3*10^6], [ 2,   7.2*10^6], [ 3,   9.6*10^6],..
      [ 4,  12.9*10^6], [ 5,  17.1*10^6], [ 6,  23.2*10^6], [ 7,  31.4*10^6],..
      [ 8,  38.6*10^6], [ 9,  50.2*10^6], [10,  62.9*10^6], [11,  76.0*10^6],..
      [12,  92.0*10^6], [13, 106.5*10^6], [14, 123.2*10^6], [15, 132.1*10^6],..
      [16, 152.3*10^6], [17, 180.7*10^6], [18, 205.1*10^6], [19, 226.5*10^6]];
data2=list()
for i=1:length(data)/2
  data2($+1)=[data(2*i-1), data(2*i)/10^7];
end

dataがアメリカの人口のデータです。data2は、人口の値を10^7で割って扱いやすくしています。

また、このアメリカの人口のデータに合わせたロジスティック曲線 \begin{align*} N=\frac{\mu}{1+e^{-(\gamma t+C)}}\quad \left(N_0=N(0)=\frac{\mu}{1+e^{-C}}\right) \end{align*} を用意します; $N_0=3.9\times10^6,\,\mu=197\times10^6,\,\gamma=0.3134$ として、プロットデータGを作ります。

N0=3.9*10^6;
mu=197*10^6;
r=0.3134;

function N=N(t);
  N=mu/(1+(mu-N0)/N0*exp(-r*t))/10^7;
endfunction

G=Paramplot('[t, N(t)]', 't=[0,21]', 'N=300');
L=Plotdata('mu/10^7', 'x=[Xmin(), Xmax()]');  // Gの漸近線
L1=Plotdata('5', 'x=[Xmin(), Xmax()]');   // 補助線
L2=Plotdata('10', 'x=[Xmin(), Xmax()]');  //
L3=Plotdata('15', 'x=[Xmin(), Xmax()]');  //

Lは直線 $y=\mu\times 10^{-7}$ で、ロジスティック曲線の漸近線を表します。補助線として、直線 $y=5$, $y=10$, $y=15$ のデータも用意します。

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

目盛りの設定

縦軸の目盛りには、下から10,20,30,...と振ることにします。

縦軸の目盛り(人口)を付けるのは、Beginpicture以下で、Vtickmark(数値, 'ラベル')により数値のところに目盛り(目印)ラベルを入れます。ただし、今の場合、for文を使い手作業を避けるようにしましょう。ラベルのところに、string(10*i)とすれば、各iに対応した数字が目盛りに振られます。

Openfile('tex/tick_mark_sample.tex');
Beginpicture('0.5cm');

....(中略)

// 目盛りを付ける
for i=1:22
  Vtickmark(i, string(10*i));  // 縦軸の目盛り
end

横軸の目盛り(年)には、原点の次からひとつ飛ばしで,1800,1820,1840,...と振ることにします。

横軸の目盛りを付けるのは、Htickmark(数値, 'ラベル')です。ひとつ飛ばしで数値ラベルを入れたいので、Htickmark(i,' ')で、目盛りの印だけ入れて、Expr([2*i+1,0],'s2',string(1800+i*20))で数値ラベルを書き込みます:


for i=0:19
  Htickmark(i, ' ');  // 横軸の目盛り
end
Setpen(1);
for i=0:9  // ひとつ飛ばしで数値を入れる
  Expr([2*i+1,0], 's2', string(1800+i*20));
end

....(中略)

Endpicture(1);
Closefile();

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

ソースコード

scilabファイル(.sce)のダウンロード
Setwindow([0,21], [0,23]);
Setscaling(0.8);  // 縦横比を縱0.8:橫1に

data=[[ 0,   3.9*10^6], [ 1,   5.3*10^6], [ 2,   7.2*10^6], [ 3,   9.6*10^6],..
      [ 4,  12.9*10^6], [ 5,  17.1*10^6], [ 6,  23.2*10^6], [ 7,  31.4*10^6],..
      [ 8,  38.6*10^6], [ 9,  50.2*10^6], [10,  62.9*10^6], [11,  76.0*10^6],..
      [12,  92.0*10^6], [13, 106.5*10^6], [14, 123.2*10^6], [15, 132.1*10^6],..
      [16, 152.3*10^6], [17, 180.7*10^6], [18, 205.1*10^6], [19, 226.5*10^6]];
data2=list()
for i=1:length(data)/2
  data2($+1)=[data(2*i-1), data(2*i)/10^7];
end
//seq=Listplot(data2);

//Windisp(seq);

N0=3.9*10^6;
mu=197*10^6;
r=0.3134;

function N=N(t);
  N=mu/(1+(mu-N0)/N0*exp(-r*t))/10^7;
endfunction

G=Paramplot('[t, N(t)]', 't=[0,21]', 'N=300');
L=Plotdata('mu/10^7', 'x=[Xmin(), Xmax()]');  // Gの漸近線
L1=Plotdata('5', 'x=[Xmin(), Xmax()]');   // 補助線
L2=Plotdata('10', 'x=[Xmin(), Xmax()]');  //
L3=Plotdata('15', 'x=[Xmin(), Xmax()]');  //

//Windisp(G);

Openfile('tex/tick_mark_sample.tex');
Beginpicture('0.5cm');
// 座標軸のラベルの設定
Setax('', '\text{year}', 's4',..
      '\text{population}\,(\times 10^6)', 'n2', '$1790$', 's2w');

Drwline(G, 1.5);
Dashline(L, 1, 1);
Dottedline(L1, L2, L3, 1, 1);  // 補助線
Setpen(5);
Drwpt(data2);
Setpen(1);

// 目盛りを付ける
for i=1:22
  Vtickmark(i, string(10*i));  // 縦軸の目盛り
end

for i=0:19
  Htickmark(i, ' ');  // 横軸の目盛り
end
for i=0:9  // ひとつ飛ばしで数値を入れる
  Expr([2*i+1,0], 's2', string(1800+i*20));
end

Expr([4,mu/10^7], 's2', '\mu=197\times 10^6');
Expr([16,8], 'c', '\displaystyle N=\frac{\mu}{1+e^{-(\gamma t+C)}}');
Endpicture(1);
Closefile();

Setscaling(1);

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