対数スケールにしたい(TCanvas::SetLogy)
1#include <TCanvas.h>
2#include <TH1D.h>
3
4TCanvas *c = new TCanvas("c", "Log Scale Canvas", 800, 600);
5
6TH1D *h = new TH1D("h", "Distribution", 100, 0.1, 1000);
7h->FillRandom("expo", 1000);
8
9c->SetLogy();
10h->Draw();
TCanvas::SetLogyメソッドでY軸を対数スケール表示に変更できます。
それぞれの軸に対して、SetLogx(X軸)やSetLogz(Z軸)も同様に使用できます。
大きく異なる値の範囲を視覚的に比較する場合に便利です。
1from ROOT import TCanvas, TH1D
2
3c = TCanvas("c", "Log Scale Canvas", 800, 600)
4
5h = TH1D("h", "Distribution", 100, 0.1, 1000)
6h.FillRandom("expo", 1000)
7
8c.SetLogy()
9h.Draw()
参考
TCanvas::SetLogyと
gStyle->SetOptLogyは異なる設定メソッドです。
TCanvas::SetLogyは特定のキャンバスに対して対数スケールを設定するのに対し、
gStyle->SetOptLogy(1)はグローバルスタイルを変更して、以降に作成されるすべてのオブジェクトに対数スケールを適用します。
対数スケールをトグルしたい
1c->SetLogy(1); // 対数スケール有効
2c->Update();
3
4c->SetLogy(0); // 通常スケールに戻す
5c->Update();
SetLogy(1)で対数スケール有効、SetLogy(0)で無効にできます。
Updateでキャンバス表示の更新が必要です。
両対数したい
1#include <TCanvas.h>
2#include <TH2D.h>
3
4TCanvas *c = new TCanvas("c", "Both Axes Log Scale", 800, 600);
5
6TH2D *h2 = new TH2D("h2", "Power-law Distribution", 50, 0.1, 1000, 50, 0.1, 1000);
7
8for (int i = 0; i < 10000; i++) {
9 double x = pow(10, gRandom->Uniform(0, 3));
10 double y = pow(10, gRandom->Uniform(0, 3));
11 h2->Fill(x, y);
12}
13
14c->SetLogx();
15c->SetLogy();
16h2->Draw("colz");
べき乗則やスケーリング則を分析する場合に活用できます。
キャンバスを分割して一部だけ対数スケールにしたい
1#include <TCanvas.h>
2#include <TH1D.h>
3
4TCanvas *c = new TCanvas("c", "Mixed Log Scales", 1200, 500);
5
6c->Divide(2, 1);
7
8// パッド1:通常のスケール
9c->cd(1);
10TH1D *h1 = new TH1D("h1", "Linear Scale", 100, 0, 10);
11h1->FillRandom("gaus", 5000);
12h1->Draw();
13
14// パッド2:対数スケール
15c->cd(2);
16TH1D *h2 = new TH1D("h2", "Log Scale", 100, 0.1, 1000);
17h2->FillRandom("expo", 5000);
18gPad->SetLogy();
19h2->Draw();
gPadは「current pad」(現在のパッド)へのポインターです。
複数のパッドで異なるスケール設定ができます。