next up previous contents
: Draw のオプション : ヒストグラムの作成 : ヒストグラムの作成   目次

1次元ヒストグラムを例にして

まずは、ヒストグラムの箱を作成する。 どの型でも扱いは同じなので、 ${\tt Float\_t}$ 型の1次元ヒストグラムを例にとれば、

 
  TH1F *h1 = new TH1F("name","title",60,-10.,20.);
のような感じである。 ここで、${\tt ''name''}$ は、${\tt TNamed}$ クラスの派生クラスとしての 名前であり、あとで見るように、 ポインターを知らなくてもこの名前をたよりに オブジェクトを探すことができる。 ${\tt ''title''}$ はヒストグラムの題であり、 ${\tt 60}$ はビンの数、${\tt -10.}$${\tt 20.}$ は横軸の 下限と上限である。

${\tt TCanvas}$ の場合と同様、

 
  TH1F h1("name","title",60,-10.,20.);
のように作っても良い。 ただし、プロット関連の ROOT のクラスのメンバー関数は その戻り値として新たにできたプロットの ポインターを返すことが多いので、 混乱を避けるため、 著者の場合、自分で作る際もポインターを使うことにしている。

さて、箱ができたのでこのヒストグラムにデータをフィルしてみよう。 ${\tt x = 5.}$ のところにデータをフィルするには


  Double_t x = 5.;
として、

  h1->Fill(x);
で良いわけだが、 たくさんフィルするのに手ではやってられない。 たくさんデータをフィルしたければ、 「猿にも」にあるようにファイルから読み込んだりすれば 良いわけだが、 ここでは、練習なので、正規分布乱数を使ってフィルしてみる。

  gRandom->SetSeed();
  Int_t i;
  for (i=0; i<10000; i++) h1->Fill(gRandom->Gaus(5.,3.));
この例では、乱数のシードをセットした後、 中心 ${\tt 5}$. で、幅 ${\tt 3.}$ の 正規分布乱数 ${\tt 10000}$ 点をフィルしている。 ${\tt gRandom->SetSeed()}$ は省略できるようである。 乱数には他にも、${\tt Exp}$ とか ${\tt Landau}$ とか ${\tt Poisson}$ とか ${\tt Binomial}$ とかいろいろあるので試してみるのも一興である。 今の例では、${\tt for}$ ループを1行で書くことができたが、 複数行にわたるコマンドを書きたい場合も生ずる。 そんな場合は "{" をうち複数行モードにはいってから入力する。 複数行モードの終は "}" である。

ヒストグラムは重みつきでフィルすることもできる。


  Double_t w = 0.5;
  h1->Fill(x,w);
とかすると、ビンは ${\tt 1}$ ではなく${\tt w}$ だけ増えることになる。 これらのフィルの操作は、後で見るように 2次元ヒストグラムに関しても同様である。

さて、 フィルの結果を描画するには


  h1->Draw();
と打つ。

図 3.3: ヒストグラムの描画。
\begin{figure}
\centerline {
\epsfig{file=figs/h1p.eps,width=6cm}}\end{figure}

図 3.4: 誤差棒をつける。
\begin{figure}
\centerline {
\epsfig{file=figs/drawoption.eps,width=6cm}}\end{figure}

味もそっけもないヒストグラムである。


next up previous contents
: Draw のオプション : ヒストグラムの作成 : ヒストグラムの作成   目次
Keisuke Fujii 平成12年12月22日