グラフを描画したい(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 - 描画オプション(オブジェクトの種類によって異なります)
戻り値:
なし
ヒストグラムの描画オプション
ヒストグラムの描画ではさまざまなオプションが使用できます:
オプション |
説明 |
|---|---|
(デフォルト) |
バーグラフ |
|
エラーバー付き |
|
エラーバー付き(点線) |
|
エラーバーのみ |
|
エラーフィルエリア |
|
拡張エラーバー |
|
曲線接続 |
|
折れ線グラフ |
|
点描画 |
|
マーカー付き |
|
バーグラフ |
|
ステップヒストグラム |
使用例
ヒストグラムを描画したい
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使用時) |
|
軸の統計ボックスをリセット |
|
統計ボックスを表示 |
描画後のカスタマイズ
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
メソッド |
目的 |
用途 |
|---|---|---|
|
キャンバスに描画 |
リアルタイム表示 |
|
ファイルに保存(単一形式) |
画像ファイルとして保存 |
|
ファイルに出力(複数形式対応) |
PDF/PSマルチページ対応 |