SetBinContent with char x-axis or Fill

Please provide the following information:


ROOT Version (e.g. 6.12/02):
Platform, compiler (e.g. CentOS 7.3, gcc6.2):


Hello, I am asking this question to you guys with my dillema

There is a code

TCanvas *hlabels1()
{  float balance[] = {5,6,7,8,9,10,5,5,5,5,5,5,5,5,5,5,5,5,5,5};
   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(2);
   //h->SetCanExtend(TH1::kAllAxes);
   for (Int_t i=0;i<10;i++) {
     h->Fill(people[i],balance[i]);
   }
   h->LabelsDeflate();
   h->Draw();
   TPaveText *pt = new TPaveText(0.7,0.85,0.98,0.98,"brNDC");
   pt->SetFillColor(1);
   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();
   return c1;
}

This code obviously give me a funky plot (The color of histogram not being filled)
since Fill should be used as Fill->(people[i],1)

However, I can not replace that with SetBinContent since I want x-axis as char variable.

Could I know a way

To fill TH1F with char variable x-axis with an array of float variable as BinContent?

Thank you!

May be you want something like that:

{
   float balance[] = {5,6,7,8,9,10,5,5,5,5,5,5,5,5,5,5,5,5,5,5};
   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();
   TH1F *h = new TH1F("h","test",3,0,3);
   h->SetFillColor(kRed);
   h->SetStats(0);
   for (Int_t i=0;i<10;i++) h->Fill(people[i],balance[i]);
   h->LabelsDeflate();
   h->Draw("hist");
}

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.