キャンバスを作成したい(TCanvas)
1#include <TCanvas.h>
2
3// キャンバスを作成
4TCanvas *c = new TCanvas("c1", "Canvas Title", 800, 600);
5c->Draw();
TCanvasはROOTで図形やグラフを描画するための描画領域(キャンバス)を提供するクラスです。
ヒストグラムやグラフなどのオブジェクトはTCanvas上に描画されます。
1from ROOT import TCanvas
2
3# キャンバスを作成
4c = TCanvas("c1", "Canvas Title", 800, 600)
5c.Draw()
コンストラクターのシグネチャ
1// デフォルトコンストラクター
2TCanvas();
3
4// 基本的なコンストラクター
5TCanvas(const char *name,
6 const char *title = "",
7 Int_t ww = 0,
8 Int_t wh = 0);
9
10// 詳細なコンストラクター(位置とサイズを指定)
11TCanvas(const char *name,
12 const char *title,
13 Int_t wtopx,
14 Int_t wtopy,
15 Int_t ww,
16 Int_t wh);
コンストラクターのパラメーター
基本的なコンストラクター
name - キャンバスの識別名
オブジェクト識別用
ROOTファイルでの保存
同じディレクトリ内では一意
title - キャンバスのタイトル
ウィンドウのタイトルバーに表示
ww - キャンバスの幅(ピクセル)
デフォルト値:0(自動決定)
0の場合は約700ピクセル
wh - キャンバスの高さ(ピクセル)
デフォルト値:0(自動決定)
0の場合は約600ピクセル
詳細なコンストラクター(位置とサイズ指定)
wtopx - ウィンドウの左端のX座標
wtopy - ウィンドウの上端のY座標
ww - キャンバスの幅(ピクセル)
wh - キャンバスの高さ(ピクセル)
newで作成すべきか、スタック変数で作成すべきか
ROOTではキャンバスは**newで動的確保することが推奨されます。**
1#include <TCanvas.h>
2
3// ❌ 推奨されない:スタック変数として作成
4{
5 TCanvas c("c", "Canvas"); // スコープを抜けるとメモリが解放される
6 // ここで描画
7} // キャンバスのメモリが自動解放される
8
9// ✅ 推奨:newで動的確保
10TCanvas *c = new TCanvas("c", "Canvas", 800, 600);
11// ここで描画
12// 手動でdelete c;する必要はない(ROOTが管理)
newを推奨する理由
キャンバスがROOTに登録される
newで作成したキャンバスはROOTのメモリ管理下に入るgROOT->GetListOfCanvases()で参照できる
対話モードとマクロの動作が一貫する
対話モードで
newを使う場合と同じ動作が保証されるスタック変数だとスコープを抜けた時に予期しない動作が発生する可能性
メモリ管理はROOTが行う
ROOTはキャンバスのメモリを自動管理する
明示的な
deleteは通常不要
ウィンドウが消えない
スタック変数ではスコープ終了時にウィンドウが消えてしまう
newで作成すればプログラム終了まで表示される
グラフやヒストグラムを描画したい
1#include <TCanvas.h>
2#include <TH1D.h>
3#include <TRandom.h>
4
5// キャンバスを作成
6TCanvas *c = new TCanvas("c", "Histogram Canvas", 800, 600);
7
8// ヒストグラムを作成
9TH1D *h = new TH1D("h", "Gaussian Distribution", 100, -3, 3);
10
11// データを入力
12for (int i = 0; i < 10000; i++) {
13 h->Fill(gRandom->Gaus(0, 1));
14}
15
16// キャンバスに描画
17h->Draw();
注釈
ROOTの対話モードでh->Draw()を実行した場合、キャンバスが存在しなければ自動的に生成されます。
ただし、マクロやスクリプトではキャンバスを明示的に作成することが推奨されます。
関連メソッド
TCanvas::Divide - キャンバスを分割する
TCanvas::Draw - グラフを描画する
TCanvas::SaveAs - ファイルに保存する
TCanvas::cd - 領域を選択する
TLegend - 凡例を追加する