Raw File
hbars.C
/// \file
/// \ingroup tutorial_hist
/// \notebook
/// Example of bar charts with 1-d histograms.
///
/// \macro_image
/// \macro_code
///
/// \author Rene Brun

TCanvas *hbars()
{
   // Try to open first the file cernstaff.root in tutorials/tree directory
   TString filedir = gROOT->GetTutorialDir();
   filedir += TString("/tree/");
   TString filename = "cernstaff.root";
   bool fileNotFound = gSystem->AccessPathName(filename); // note opposite return code

   // If file is not found try to generate it using the macro tree/cernbuild.C
   if (fileNotFound) {
      TString macroName = filedir + "cernbuild.C";
      if (!gInterpreter->IsLoaded(macroName)) gInterpreter->LoadMacro(macroName);
      gROOT->ProcessLineFast("cernbuild()");
   }
   TFile * f = TFile::Open(filename);
   if (!f) {
      Error("hbars", "file cernstaff.root not found");
      return nullptr;
   }
   TTree *T = (TTree*)f->Get("T");
   if (!T) {
      Error("hbars", "Tree T is not present in file %s", f->GetName());
      return nullptr;
   }
   T->SetFillColor(45);
   TCanvas *c1 = new TCanvas("c1","histograms with bars",700,800);
   c1->SetFillColor(42);
   c1->Divide(1,2);

   // Horizontal bar chart
   c1->cd(1);
   gPad->SetGrid();
   gPad->SetLogx();
   gPad->SetFrameFillColor(33);
   T->Draw("Nation","","hbar2");

   // Vertical bar chart
   c1->cd(2);
   gPad->SetGrid();
   gPad->SetFrameFillColor(33);
   T->Draw("Division>>hDiv","","goff");
   TH1F *hDiv = (TH1F*)gDirectory->Get("hDiv");
   hDiv->SetStats(0);
   TH1F *hDivFR = (TH1F*)hDiv->Clone("hDivFR");
   T->Draw("Division>>hDivFR","Nation==\"FR\"","goff");
   hDiv->SetBarWidth(0.45);
   hDiv->SetBarOffset(0.1);
   hDiv->SetFillColor(49);
   TH1 *h1 = hDiv->DrawCopy("bar2");
   hDivFR->SetBarWidth(0.4);
   hDivFR->SetBarOffset(0.55);
   hDivFR->SetFillColor(50);
   TH1 *h2 = hDivFR->DrawCopy("bar2,same");

   TLegend *legend = new TLegend(0.55,0.65,0.76,0.82);
   legend->AddEntry(h1,"All nations","f");
   legend->AddEntry(h2,"French only","f");
   legend->Draw();

   c1->cd();
   delete f;
   return c1;
}
back to top