キャンバスを分割したい(TCanvas::Divide

 1#include <TCanvas.h>
 2#include <TH1D.h>
 3
 4TCanvas *c = new TCanvas("c", "Divided Canvas", 1200, 800);
 5
 6// 2列×3行に分割(6つの領域)
 7c->Divide(2, 3);
 8
 9// 5番目の領域に描画
10c->cd(5);

TCanvas::Divideでキャンバスを複数の領域に分割できます。 TCanvas::cdで描画対象の領域を選択します。

1from ROOT import TCanvas
2
3c = TCanvas("c", "Divided Canvas", 1200, 800)
4
5c.Divide(2, 3)
6c.cd(5)

マージンを調整したい

 1#include <TCanvas.h>
 2#include <TH1D.h>
 3
 4TCanvas *c = new TCanvas("c", "Canvas", 1200, 800);
 5
 6// X・Yマージンを5%に設定(デフォルトは1%)
 7c->Divide(2, 3, 0.05, 0.05);
 8
 9for (int i = 1; i <= 6; i++) {
10    c->cd(i);
11    TH1D *h = new TH1D(Form("h%d", i), Form("Histo %d", i), 50, -3, 3);
12    h->FillRandom("gaus", 1000);
13    h->Draw();
14}

TCanvas::Divideの第3引数と第4引数でXマージンとYマージンを指定できます。 マージンは領域の端から描画領域までのスペースで、デフォルトは0.01(1%)です。

描画領域を切り替えたい(TCanvas::cd

 1#include <TCanvas.h>
 2#include <TGraph.h>
 3#include <TMath.h>
 4
 5TCanvas *c = new TCanvas("c", "Canvas", 1200, 800);
 6c->Divide(1, 2);
 7
 8c->cd(1);
 9TGraph *g1 = new TGraph();
10for (int i = 0; i < 10; i++) g1->SetPoint(i, i, i * i);
11g1->SetTitle("Upper Area");
12g1->Draw("APL");
13
14c->cd(2);
15TGraph *g2 = new TGraph();
16for (int i = 0; i < 10; i++) g2->SetPoint(i, i, TMath::Sqrt(i));
17g2->SetTitle("Lower Area");
18g2->Draw("APL");

TCanvas::cdで描画領域を切り替えて、 複数のヒストグラムやグラフを同じキャンバスに描画できます。

 1// 2列×2行に分割
 2c->Divide(2, 2);
 3// +---+---+
 4// | 1 | 2 |
 5// +---+---+
 6// | 3 | 4 |
 7// +---+---+
 8
 9// 2列x3行の分割
10c->Divide(2, 3);
11// +---+---+
12// | 1 | 2 |
13// +---+---+
14// | 3 | 4 |
15// +---+---+
16// | 5 | 6 |
17// +---+---+

領域番号は左上が1で、左から右、上から下の順に増加します。

 1#include <TCanvas.h>
 2#include <TH1D.h>
 3#include <TRandom.h>
 4
 5TCanvas *c = new TCanvas("c", "Divided Canvas", 1200, 800);
 6c->Divide(2, 2);
 7
 8for (int i = 1; i <= 4; i++) {
 9    c->cd(i);
10    TH1D *h = new TH1D(Form("h%d", i), Form("Histogram %d", i), 100, -3, 3);
11    for (int j = 0; j < 10000; j++) h->Fill(gRandom->Gaus(0, 1));
12    h->Draw();
13}

ループ処理と組み合わせて、複数のヒストグラムを効率的に描画できます。

1c->cd(0);

0を指定するとメインキャンバスが選択されます。

関連メソッド

参考資料