LoginSignup
5
3

More than 5 years have passed since last update.

MATLABでビン幅対数のヒストグラムの作成

Posted at

三行で

  • histogram()は引数edgeを指定することでビンの両端の値を指定することができる
  • logspace()で対数的に等間隔な点を作成する => これをedgeとして使用
  • set(gca, 'Xscale', 'log')でx軸を対数軸にする

ヒストグラムの作成 - histogram()

MATLABでヒストグラムを作成する場合,hist()1histogram()を使用する.
通常,これらの関数はビン幅が一定のヒストグラムを作成する.

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()の出力そのまま)

fig1.png

fig2 (x軸を対数化)

fig2.png

fig3 (y軸も対数化)

fig3.png


  1. 少なくともR2016aではhist()は非推奨 

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3