Get bin label from bin number

Try with:

for(Int_t bin=1; bin<10; bin++) {
    if(hist->GetBinContent(bin) > 0.1) {
        cout << hist->GetXaxis()->GetLabels()->At(bin-1)->GetName() << endl;
    } 
}

Note that for TList::At(), you start with zero, while bin numbers start from 1, hence the bin-1. Read also about TObject::GetName()

{
  const Int_t nx = 20;
  const char *people[nx] = {"Jean","Pierre","Marie","Odile","Sebastien",
     "Fons","Rene","Nicolas","Xavier","Greg","Bjarne","Anton","Otto",
     "Eddy","Peter","Pasha","Philippe","Suzanne","Jeff","Valery"};
  TCanvas *c1 = new TCanvas("c1","demo bin labels",10,10,900,500);
  c1->SetGrid();
  c1->SetTopMargin(0.15);
  TH1F *h = new TH1F("h","test",3,0,3);
  h->SetStats(0);
  h->SetFillColor(38);
  h->SetCanExtend(TH1::kAllAxes);
  for (Int_t i=0;i<5000;i++) {
     Int_t r = gRandom->Rndm()*20;
     h->Fill(people[r],1);
  }
  h->LabelsDeflate();
  h->Draw();
  TPaveText *pt = new TPaveText(0.7,0.85,0.98,0.98,"brNDC");
  pt->SetFillColor(18);
  pt->SetTextAlign(12);
  pt->AddText("Use the axis Context Menu LabelsOption");
  pt->AddText(" \"a\"   to sort by alphabetic order");
  pt->AddText(" \">\"   to sort by decreasing values");
  pt->AddText(" \"<\"   to sort by increasing values");
  pt->Draw();
  for (int i=0; i<nx; ++i) {
    cout <<h->GetXaxis()->GetLabels()->At(i)->GetName()<<endl;
  }
}


root[] .x aa.C
Jeff
Peter
Sebastien
Fons
Anton
Suzanne
Philippe
Valery
Pasha
Greg
Bjarne
Odile
Nicolas
Rene
Otto
Marie
Eddy
Pierre
Xavier
Jean

2 Likes