{ /// Creating histograms Int_t nbins=7 ; TH2D* histo1 = new TH2D ("histo1","histo1",nbins,0.,nbins*1.,nbins,0.,nbins*1.) ; histo1->SetStats(kFALSE) ; histo1->SetFillColor(kRed) ; histo1->SetMarkerColor(kRed) ; histo1->SetMarkerStyle(20) ; histo1->SetBinContent((nbins/2+1) ,(nbins/2+1) ,5.) ; histo1->SetBinContent((nbins/2+1)-1,(nbins/2+1) ,3.) ; histo1->SetBinContent((nbins/2+1)+1,(nbins/2+1) ,4.) ; histo1->SetBinContent((nbins/2+1) ,(nbins/2+1)-1,2.) ; histo1->SetBinContent((nbins/2+1) ,(nbins/2+1)+1,1.) ; Int_t shiftxy=1 ; Double_t shiftz=0. ; TH2D* histo2 = new TH2D ("histo2","histo2",nbins,0.,nbins*1.,nbins,0.,nbins*1.) ; histo2->SetStats(kFALSE) ; histo2->SetFillColor(kBlue) ; histo2->SetMarkerColor(kBlue) ; histo2->SetMarkerStyle(20) ; for (Int_t col=histo2->GetNbinsX(); col>=shiftxy; col--) { for (Int_t row=histo2->GetNbinsY(); row>=shiftxy; row--) { histo2->SetBinContent( col,row, histo1->GetBinContent(col-shiftxy,row-shiftxy)+shiftz ) ; } } /// Creating a global THStack TH2D* histo_dummy = (TH2D*) histo1->Clone("histo_dummy") ; histo_dummy->Reset() ; histo_dummy->SetFillColor(kWhite) ; /// Empty histogram to get a white floor (equivalent to http://root.cern.ch/phpBB3//viewtopic.php?t=4598) THStack *hstack12 = new THStack ("hstack12","hstack12") ; hstack12->Add(histo_dummy) ; hstack12->Add(histo1) ; hstack12->Add(histo2) ; /// Creating a global "nostack THStack" keeping only the highest valued bin (see http://root.cern.ch/phpBB3/viewtopic.php?f=3&t=6159) Double_t y1=-1., y2=-1. ; TH2D* histo1__ = (TH2D*) histo1->Clone("histo1__") ; TH2D* histo2__ = (TH2D*) histo2->Clone("histo2__") ; if ( ( histo1__->GetNbinsX() == histo2__->GetNbinsX() ) || ( histo1__->GetNbinsY() == histo2__->GetNbinsY() ) ) { for (Int_t col=1; col<=histo1__->GetNbinsX(); col++) { for (Int_t row=1; row<=histo1__->GetNbinsY(); row++) { y1 = histo1->GetBinContent(col,row) ; y2 = histo2->GetBinContent(col,row) ; if ( y2 >= y1 ) { histo1__->SetBinContent(col,row,0.) ; } else { histo2__->SetBinContent(col,row,0.) ; } } } } THStack *hstack12__ = new THStack ("hstack12__","hstack12__") ; hstack12__->Add(histo_dummy) ; hstack12__->Add(histo1__) ; hstack12__->Add(histo2__) ; /// Plotting everything TCanvas *canvas_ = new TCanvas ("canvas_","canvas_",0,0,gClient->GetDisplayWidth(),gClient->GetDisplayHeight()) ; canvas_->Divide(2,1) ; canvas_->cd(1) ; hstack12 ->SetTitle("THStack::Draw(\"lego1\")") ; hstack12 ->DrawClone("lego1,fb") ; canvas_->cd(2) ; hstack12__->SetTitle("THStack::Draw(\"lego1\")") ; hstack12__->DrawClone("lego1,fb") ; gPad->Update() ; canvas_->SaveAs("THStack_lego_nostack_.gif") ; canvas_->SaveAs("THStack_lego_nostack_.png") ; }