How to set ranges on axis?

The viewing range for a histogram axis can be set from bin ifirst to ilast using the method TAxis::SetRange(ifirst, ilast). Example (hpxpy is a 2D histogram):

{
   TFile f("hsimple.root");
   hpxpy->Draw("colz");
   hpxpy->GetYaxis()->SetRange(22,23);
   hpxpy->GetXaxis()->SetRange(18,19);
}

Sometimes it is more convenient to set this range using “User’s Coordinates” (axis values) rather than bin numbers. To do that one should use TAxis::SetRangeUser(ufirst, ulast). This method computes the closest bin to ufirst and ulast and calls TAxis::SetRange(ifirst, ilast) with these values.

The method SetAxisRange(Axis_t xmin, Axis_t xmax, Option_t *axis) allows to set the axis ranges directly on a histogram object without having to use the intermediate Get[XYZ]axis(). For instance:

   hpxpy->GetYaxis()->SetRangeUser(0., 3.);

is equivalent to:

   hpxpy->SetAxisRange(0., 3.,"Y");

SetAxisRange also automatically performs the call to SetMinimum() and SetMaximum() when the axis is the one holding the histogram content (Y axis, for 1D histograms, Z axis for 2D histograms)

For unbinned data sets, like graphs and multigraphs, the way to change the axis range is to use SetLimits(vmin, vmax). This method changes the minimum and maximum values of the axis. Example:

{
   Int_t n=20;
   Double_t x[n],y[n];
   for (Int_t i=0; i < n; i++) {
      x[i]=i*0.1;
      y[i]=10*sin(x[i]+0.2);
   }
   auto gr1  = new TGraph (n,x,y);
   auto axis = gr1->GetXaxis();

   axis->SetLimits(0.,5.);                 // along X
   gr1->GetHistogram()->SetMaximum(20.);   // along          
   gr1->GetHistogram()->SetMinimum(-20.);  //   Y     

   gr1->Draw("AC*");
}

Another method is to change the axis ranges after the graph drawing:

{
   auto c = new TCanvas("c","A Zoomed Graph",200,10,700,500);

   int n = 10;
   double x[10] = {-.22,.05,.25,.35,.5,.61,.7,.85,.89,.95};
   double y[10] = {1,2.9,5.6,7.4,9,9.6,8.7,6.3,4.5,1};

   auto gr = new TGraph(n,x,y);
   gr->SetMarkerColor(4);
   gr->SetMarkerStyle(20);
   gr->Draw("ALP");
   gr->GetXaxis()->SetRangeUser(0, 0.5);
   gr->GetYaxis()->SetRangeUser(1, 8);
}

It is also possible to draw a frame with the wanted limits and then draw the graph. This method allows specifying larger axis ranges than the original one.

{
   auto c = new TCanvas("c","A Zoomed Graph",200,10,700,500);
   c->DrawFrame(0,1,0.5,8);

   int n = 10;
   double x[10] = {-.22,.05,.25,.35,.5,.61,.7,.85,.89,.95};
   double y[10] = {1,2.9,5.6,7.4,9,9.6,8.7,6.3,4.5,1};

   auto gr = new TGraph(n,x,y);
   gr->SetMarkerColor(4);
   gr->SetMarkerStyle(20);
   gr->Draw("LP");
}
8 Likes