# How to plot two graphs with different scale on the same can

Hi,
I am trying to plot two graphs (TGraph, NOT histograms) with different scales on the same canvas. I know there is an example in user guide which demostrates how to plot two histograms with different scales on the canvas. Yes, I could transfer TGraph to TH1 and then plot them together. I am wondering if I can do that for 2 graphs. But for TGraph , no method like Scale() in TH1. Any body could give me hints?

Thanks,
Zhiyi.

see example below

Rene

[code]{
//
// Example showing how to superimpose a TGraph with a different range
//
c1 = new TCanvas(â€śc1â€ť,â€śgerrors2â€ť,200,10,700,500);

``````  // draw a frame to define the range
``````

hr->SetXTitle(â€śX titleâ€ť);
hr->SetYTitle(â€śY titleâ€ť);

``````  // create first graph
``````

Int_t n1 = 10;
Double_t x1[] = {-0.22, 0.05, 0.25, 0.35, 0.5, 0.61,0.7,0.85,0.89,0.95};
Double_t y1[] = {1,2.9,5.6,7.4,9,9.6,8.7,6.3,4.5,1};
Double_t ex1[] = {.05,.1,.07,.07,.04,.05,.06,.07,.08,.05};
Double_t ey1[] = {.8,.7,.6,.5,.4,.4,.5,.6,.7,.8};
gr1 = new TGraphErrors(n1,x1,y1,ex1,ey1);
gr1->SetMarkerColor(kBlue);
gr1->SetMarkerStyle(21);
gr1->Draw(â€śLPâ€ť);

``````  // create second graph
``````

Int_t n2 = 10;
Float_t x2[] = {-0.28, 0.005, 0.19, 0.29, 0.45, 0.56,0.65,0.80,0.90,1.01};
Float_t y2[] = {0.82,3.86,7,9,10,10.55,9.64,7.26,5.42,2};
Float_t ex2[] = {.04,.12,.08,.06,.05,.04,.07,.06,.08,.04};
Float_t ey2[] = {.6,.8,.7,.4,.3,.3,.4,.5,.6,.7};
for (Int_t i=0;i<n2;i++) {
y2[i] *= 100;
ey2[i] *= 100;
}
c1->cd();
overlay->SetFillStyle(4000);
overlay->SetFillColor(0);
overlay->SetFrameFillStyle(4000);
overlay->Draw();
overlay->cd();
gr2 = new TGraphErrors(n2,x2,y2,ex2,ey2);
gr2->SetMarkerColor(kRed);
gr2->SetMarkerStyle(20);
gr2->SetName(â€śgr2â€ť);
Double_t ymin = 0;
Double_t ymax = 1200;
TH1F *hframe = overlay->DrawFrame(xmin,ymin,xmax,ymax);
hframe->GetXaxis()->SetLabelOffset(99);
hframe->GetYaxis()->SetLabelOffset(99);
gr2->Draw(â€śLPâ€ť);

//Draw an axis on the right side
TGaxis *axis = new TGaxis(xmax,ymin,xmax, ymax,ymin,ymax,510,"+L");
axis->SetLineColor(kRed);
axis->SetLabelColor(kRed);
axis->Draw();

}[/code]

1 Like

Dear ROOT community,

I was trying to implement two different graphs on same canvas with different y axis. I got some help using a macro given here. But when I am trying both the graphs with log scale it is not working. Can anyone please guide me what should I include?

Following is the macro I am using â€¦

``````void testaxis()
{
gROOT->SetStyle("Plain");
gROOT->Reset();
c1 = new TCanvas("c1","gerrors2",200,10,700,500);

// draw a frame to define the range
TH1F *hr = c1->DrawFrame(-0.4,0,1.2,12);
hr->SetXTitle("X title");
hr->SetYTitle("Y title");

//==============================================================================//
// create first graph
Int_t n1 = 10;
Double_t x1[]  = {-0.22, 0.05, 0.25, 0.35, 0.5, 0.61,0.7,0.85,0.89,0.95};
Double_t y1[]  = {1,2.9,5.6,7.4,9,9.6,8.7,6.3,4.5,1};
Double_t ex1[] = {.05,.1,.07,.07,.04,.05,.06,.07,.08,.05};
Double_t ey1[] = {.8,.7,.6,.5,.4,.4,.5,.6,.7,.8};
gr1 = new TGraphErrors(n1,x1,y1,ex1,ey1);
gr1->SetMarkerColor(kBlue);
gr1->SetMarkerStyle(21);
//gr1->GetYaxis()->SetLogy();
gr1->Draw("LP");

// create second graph
Int_t n2 = 10;
Float_t x2[]  = {-0.28, 0.005, 0.19, 0.29, 0.45, 0.56,0.65,0.80,0.90,1.01};
Float_t y2[]  = {0.82,3.86,7,9,10,10.55,9.64,7.26,5.42,2};
Float_t ex2[] = {.04,.12,.08,.06,.05,.04,.07,.06,.08,.04};
Float_t ey2[] = {.6,.8,.7,.4,.3,.3,.4,.5,.6,.7};

//=============================================================================//

for (Int_t i=0;i<n2;i++)
{
y2[i] *= 100;
ey2[i] *= 100;
}

c1->cd();

overlay->SetFillStyle(4000);
overlay->SetFrameFillStyle(4000);
//overlay->SetLogy();
overlay->Draw();
overlay->cd();
gr2 = new TGraphErrors(n2,x2,y2,ex2,ey2);
gr2->SetMarkerColor(kRed);
gr2->SetMarkerStyle(20);
gr2->SetName("gr2");
Double_t ymin = 0;
Double_t ymax = 1300;
TH1F *hframe = overlay->DrawFrame(xmin,ymin,xmax,ymax);
hframe->GetXaxis()->SetLabelOffset(99);
hframe->GetYaxis()->SetLabelOffset(99);
gr2->Draw("LP");

//Draw an axis on the right side
TGaxis *axis = new TGaxis(xmax,ymin,xmax, ymax,ymin,ymax,510,"+L");
axis->SetTitle("log axis");
axis->SetLineColor(kRed);
axis->SetLabelColor(kRed);
axis->Draw();
}``````

I guess it is because of the Y limit:

``````root [0]    c1 = new TCanvas("c1","gerrors2",200,10,700,500);
root [1]    TH1F *hr = c1->DrawFrame(-0.4,0,1.2,12);