グラフを描画したい(TCanvas::Draw

 1#include <TCanvas.h>
 2#include <TH1D.h>
 3
 4TCanvas *c = new TCanvas("c", "Canvas", 800, 600);
 5
 6TH1D *h = new TH1D("h", "Histogram", 100, -3, 3);
 7h->FillRandom("gaus", 1000);
 8
 9// キャンバスに描画
10h->Draw();

TCanvas::Drawメソッドでオブジェクト(ヒストグラム、グラフなど)をキャンバスに描画できます。 描画オプションで表示スタイルをカスタマイズできます。

1from ROOT import TCanvas, TH1D
2
3c = TCanvas("c", "Canvas", 800, 600)
4
5h = TH1D("h", "Histogram", 100, -3, 3)
6h.FillRandom("gaus", 1000)
7
8# キャンバスに描画
9h.Draw()

メソッドのシグネチャ

1void Draw(Option_t *option = "")

引数と戻り値

引数:

  • option - 描画オプション(オブジェクトの種類によって異なります)

戻り値:

  • なし

ヒストグラムの描画オプション

ヒストグラムの描画ではさまざまなオプションが使用できます:

オプション

説明

(デフォルト)

バーグラフ

"E"

エラーバー付き

"E1"

エラーバー付き(点線)

"E2"

エラーバーのみ

"E3"

エラーフィルエリア

"E4"

拡張エラーバー

"C"

曲線接続

"L"

折れ線グラフ

"*"

点描画

"P"

マーカー付き

"B"

バーグラフ

"HIST"

ステップヒストグラム

使用例

ヒストグラムを描画したい

 1#include <TCanvas.h>
 2#include <TH1D.h>
 3
 4TCanvas *c = new TCanvas("c", "Histogram", 800, 600);
 5
 6TH1D *h = new TH1D("h", "Distribution", 100, -5, 5);
 7
 8// データを追加
 9for (int i = 0; i < 10000; i++) {
10    h->Fill(gRandom->Gaus(0, 1));
11}
12
13// ヒストグラムを描画
14h->Draw();

基本的なバーグラフ形式でヒストグラムを描画します。

エラーバー付きで描画したい

 1#include <TCanvas.h>
 2#include <TH1D.h>
 3
 4TCanvas *c = new TCanvas("c", "Histogram with Error Bars", 800, 600);
 5
 6TH1D *h = new TH1D("h", "Data with Errors", 50, -5, 5);
 7
 8// データを追加
 9for (int i = 0; i < 5000; i++) {
10    h->Fill(gRandom->Gaus(0, 1));
11}
12
13// エラーバー付きで描画
14h->Draw("E");

統計的なエラーバーを表示します。

曲線で描画したい

 1#include <TCanvas.h>
 2#include <TH1D.h>
 3
 4TCanvas *c = new TCanvas("c", "Smooth Histogram", 800, 600);
 5
 6TH1D *h = new TH1D("h", "Distribution", 50, -5, 5);
 7
 8// データを追加
 9for (int i = 0; i < 10000; i++) {
10    h->Fill(gRandom->Gaus(0, 1));
11}
12
13// 曲線で描画
14h->Draw("C");

ヒストグラムの値を曲線で接続して表示します。

複数のヒストグラムを重ねて描画したい

 1#include <TCanvas.h>
 2#include <TH1D.h>
 3
 4TCanvas *c = new TCanvas("c", "Overlaid Histograms", 800, 600);
 5
 6// 最初のヒストグラム
 7TH1D *h1 = new TH1D("h1", "Dataset 1", 50, -5, 5);
 8for (int i = 0; i < 5000; i++) {
 9    h1->Fill(gRandom->Gaus(0, 1));
10}
11h1->SetLineColor(2);  // 赤色
12h1->Draw();
13
14// 2番目のヒストグラム
15TH1D *h2 = new TH1D("h2", "Dataset 2", 50, -5, 5);
16for (int i = 0; i < 5000; i++) {
17    h2->Fill(gRandom->Gaus(0.5, 1.2));
18}
19h2->SetLineColor(4);  // 青色
20h2->Draw("SAME");  // SAME オプションで重ねる
21
22// 凡例を追加
23TLegend *leg = new TLegend(0.7, 0.7, 0.9, 0.9);
24leg->AddEntry(h1, "Dataset 1", "l");
25leg->AddEntry(h2, "Dataset 2", "l");
26leg->Draw();

複数のヒストグラムを同時に表示して比較できます。

グラフを描画したい

 1#include <TCanvas.h>
 2#include <TGraph.h>
 3
 4TCanvas *c = new TCanvas("c", "Graph", 800, 600);
 5
 6TGraph *g = new TGraph();
 7
 8// グラフのポイントを追加
 9for (int i = 0; i < 50; i++) {
10    double x = i * 0.1;
11    double y = sin(x);
12    g->SetPoint(i, x, y);
13}
14
15// グラフを描画
16g->Draw("AL");

グラフを直線で描画します。"AL"オプションで軸とポイントを結ぶ線を表示します。

マーカー付きでグラフを描画したい

 1#include <TCanvas.h>
 2#include <TGraph.h>
 3
 4TCanvas *c = new TCanvas("c", "Graph with Markers", 800, 600);
 5
 6TGraph *g = new TGraph();
 7
 8// グラフのポイントを追加
 9for (int i = 0; i < 20; i++) {
10    double x = i;
11    double y = i * i;
12    g->SetPoint(i, x, y);
13}
14
15// マーカーと線で描画
16g->Draw("ALP");  // A: 軸, L: 線, P: マーカー

各ポイントにマーカーを表示します。

2次元ヒストグラムを描画したい

 1#include <TCanvas.h>
 2#include <TH2D.h>
 3
 4TCanvas *c = new TCanvas("c", "2D Histogram", 800, 600);
 5
 6TH2D *h2 = new TH2D("h2", "2D Distribution", 50, -5, 5, 50, -5, 5);
 7
 8// 2次元データを追加
 9for (int i = 0; i < 10000; i++) {
10    h2->Fill(gRandom->Gaus(), gRandom->Gaus());
11}
12
13// カラーマップで描画
14h2->Draw("colz");

2次元ヒストグラムをカラーマップで表示します。

ステップヒストグラムで描画したい

 1#include <TCanvas.h>
 2#include <TH1D.h>
 3
 4TCanvas *c = new TCanvas("c", "Step Histogram", 800, 600);
 5
 6TH1D *h = new TH1D("h", "Data", 50, 0, 10);
 7
 8// データを追加
 9for (int i = 0; i < 1000; i++) {
10    h->Fill(gRandom->Uniform(0, 10));
11}
12
13// ステップヒストグラムで描画
14h->Draw("HIST");

ヒストグラムをステップ形式で描画します。

描画オプションの組み合わせ

複数のオプションを組み合わせることで、より複雑な描画ができます:

オプション

説明

"SAME"

前の描画に追加(同じパッドに重ねる)

"SAMES"

統計ボックスを再描画(SAME使用時)

"+"

軸の統計ボックスをリセット

"S"

統計ボックスを表示

描画後のカスタマイズ

 1#include <TCanvas.h>
 2#include <TH1D.h>
 3
 4TCanvas *c = new TCanvas("c", "Customized", 800, 600);
 5
 6TH1D *h = new TH1D("h", "Data", 100, -5, 5);
 7h->FillRandom("gaus", 5000);
 8
 9h->Draw();
10
11// 描画後にプロパティを変更
12h->SetLineColor(2);      // 線色を赤に
13h->SetLineWidth(2);      // 線幅を変更
14h->SetFillColor(5);      // 塗りつぶし色を変更
15h->SetFillStyle(3004);   // 塗りつぶしパターンを変更
16
17c->Modified();  // 変更を反映
18c->Update();    // 再描画

描画後にオブジェクトのプロパティを変更して、再度Updateする必要があります。

Draw vs SaveAs vs Print

メソッド

目的

用途

Draw()

キャンバスに描画

リアルタイム表示

SaveAs()

ファイルに保存(単一形式)

画像ファイルとして保存

Print()

ファイルに出力(複数形式対応)

PDF/PSマルチページ対応

関連メソッド

参考資料