三行で
-
histogram()
は引数edge
を指定することでビンの両端の値を指定することができる -
logspace()
で対数的に等間隔な点を作成する => これをedge
として使用 -
set(gca, 'Xscale', 'log')
でx軸を対数軸にする
ヒストグラムの作成 - histogram()
MATLABでヒストグラムを作成する場合,hist()
1やhistogram()
を使用する.
通常,これらの関数はビン幅が一定のヒストグラムを作成する.
histogram()
では第2引数edge
を指定することで,各ビンの境界を指定することができる.
対数的に等間隔な数列が格納されたベクトルをedge
に渡すことでビン幅を対数間隔にすることができる.
対数的に等間隔な点の作成 - logspace()
MATLABでは,linspace(a,b,n)
で両端$a,b$,要素数$n$の線形に等間隔な点を持つベクトルを作成することができる.
>> linspace(-2, 3, 6)
ans =
-2 -1 0 1 2 3
同様に,対数的に等間隔な点を持つベクトルをlogspace()
で作成することができる.
logspace(a,b,n)
は両端$10^a,10^b$,要素数$n$のベクトルを作成する.
>> logspace(-2, 3, 6)
ans =
1.0e+03 *
0.000010000000000 0.000100000000000 0.001000000000000 0.010000000000000 0.100000000000000 1.000000000000000
x軸を対数軸化 - set(gca, 'Xscale', 'log')
histogram()
は標準でx軸,y軸共に線形なヒストグラム(Figure)を作成する.
set(gca, 'Xscale', 'log')
とすることで,最後に生成したFigureのx軸を対数軸にすることができる.
作成例
10,000個一様乱数を生成してヒストグラムを作ってみる.
histo_example.m
clearvars;
% 10,000個の乱数を生成
rng(0, 'twister');
data = 1000 * rand(10000, 1);
% edge
edge = logspace(-3, 4, 29);
% ヒストグラム作成
histogram(data, edge);
% fig1
print -dpng -r300 'fig1.png'
% x軸対数化
set(gca, 'Xscale', 'log');
% fig2
print -dpng -r300 'fig2.png'
% (おまけ) y軸対数化
set(gca, 'Yscale', 'log');
% fig3
print -dpng -r300 'fig3.png'
fig1 (histogram()
の出力そのまま)
fig2 (x軸を対数化)
fig3 (y軸も対数化)
-
少なくともR2016aでは
hist()
は非推奨 ↩