キャンバスを分割したい(TCanvas::Divide)
1c->Divide(
2 1, // nx: 列数
3 1, // ny: 行数
4 0.01, // xmargin: Xマージン(0.0-1.0)
5 0.01 // ymargin: Yマージン(0.0-1.0)
6 0, // color: パッドの背景色(オプション)
7)
TCanvas::Divideでキャンパスを複数のパッド領域(TPad)に分割できます。
第一引数(nx)と第二引数(ny)で列数と行数を指定します。
第三引数(xmargin)と第四引数(ymargin)でパッド間のマージンを変更できます。
第五引数(color)でパッド領域の背景色を変更できます。
1// +---+---+
2// | 1 | 2 |
3// +---+---+
4// | 3 | 4 |
5// +---+---+
6// | 5 | 6 |
7// +---+---+
8
9c->Divide(2, 3);
10
11// 5番目のパッドを選択
12c->cd(5);
13
14// 全体を選択
15c->cd(0);
上記のサンプルは、キャンバスを2列3行に分割しています。
TCanvas::cdで描画対象のパッドを選択できます。
このサンプルでは5番目のパッドが選択しています。
cd(0)でキャンバス全体を選択できます。
マージンを調整したい(TPad::SetLeftMargin)
1gPad->SetLeftMargin(0.15); // 左マージンを15%に設定(default: 0.10)
2gPad->SetBottomMargin(0.12); // 下マージンを12%に設定(default: 0.10)
3gPad->SetRightMargin(0.05); // 右マージンを5%に設定(default: 0.05)
4gPad->SetTopMargin(0.05); // 上マージンを5%に設定(default: 0.05)
TPad::SetLeftMarginやTPad::SetBottomMarginなどのメソッドで、
キャンバスの余白を調整できます。
マージンは領域の端から描画領域までのスペースで、デフォルトは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を指定するとメインキャンバスが選択されます。
関連メソッド
TCanvas - キャンバスの基本
TCanvas::SaveAs - 分割されたキャンバスを保存する