{ /// Creating base 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 "anti-histograms" and subsequent THStack not to display zero bins. See http://root.cern.ch/phpBB3//viewtopic.php?t=4598 TH2D* histo1_ = (TH2D*) histo1->Clone("histo1_") ; histo1_->SetFillColor(kWhite) ; histo1_->SetMarkerColor(kWhite) ; for (Int_t col=1; col<=histo1_->GetNbinsX(); col++) { for (Int_t row=1; row<=histo1_->GetNbinsY(); row++) { if ( histo1->GetBinContent(col,row) > 0. ) { histo1_->SetBinContent(col,row,0.) ; } else { histo1_->SetBinContent(col,row,1e-10) ; } } } THStack *hstack1 = new THStack ("hstack1","hstack1") ; hstack1->Add(histo1) ; hstack1->Add(histo1_) ; TH2D* histo2_ = (TH2D*) histo2->Clone("histo2_") ; histo2_->SetFillColor(kWhite) ; histo2_->SetMarkerColor(kWhite) ; for (Int_t col=1; col<=histo2_->GetNbinsX(); col++) { for (Int_t row=1; row<=histo2_->GetNbinsY(); row++) { if ( histo2->GetBinContent(col,row) > 0. ) { histo2_->SetBinContent(col,row,0.) ; } else { histo2_->SetBinContent(col,row,1e-10) ; } } } THStack *hstack2 = new THStack ("hstack2","hstack2") ; hstack2->Add(histo2) ; hstack2->Add(histo2_) ; /// Creating a global THStack THStack *hstack12 = new THStack ("hstack12","hstack12") ; hstack12->Add(histo1) ; hstack12->Add(histo2) ; /// Comparing everything TCanvas *canvas = new TCanvas ("canvas","canvas",0,0,gClient->GetDisplayWidth(),gClient->GetDisplayHeight()) ; canvas->Divide(5,3) ; canvas->cd( 1) ; histo1->SetTitle("scatt") ; histo1->DrawClone("scatt" ) ; histo2->DrawClone("scatt ,same") ; canvas->cd( 2) ; histo1->SetTitle("box" ) ; histo1->DrawClone("box" ) ; histo2->DrawClone("box ,same") ; canvas->cd( 3) ; canvas->cd( 4) ; canvas->cd( 5) ; canvas->cd( 6) ; histo1->SetTitle("TH1::Draw(\"lego1\")" ) ; histo1->DrawClone("lego1,fb") ; canvas->cd( 7) ; histo2->SetTitle("TH1::Draw(\"lego1\")" ) ; histo2->DrawClone("lego1,fb") ; canvas->cd( 8) ; histo1->SetTitle("TH1::Draw(\"lego1\",\"same\")") ; histo1->DrawClone("lego1,fb") ; histo2->DrawClone("lego1,fb,same") ; canvas->cd( 9) ; canvas->cd(10) ; canvas->cd(11) ; hstack1 ->SetTitle("THStack::Draw(\"lego1\")" ) ; hstack1 ->DrawClone("lego1,fb") ; canvas->cd(12) ; hstack2 ->SetTitle("THStack::Draw(\"lego1\")" ) ; hstack2 ->DrawClone("lego1,fb") ; canvas->cd(13) ; hstack12->SetTitle("THStack::Draw(\"nostack,lego1\")" ) ; hstack12->DrawClone("nostack,lego1,fb") ; canvas->cd(14) ; hstack12->SetTitle("THStack::Draw(\"lego1\")" ) ; hstack12->DrawClone("lego1,fb") ; canvas->cd(15) ; hstack1 ->SetTitle("THStack::Draw(\"lego1\",\"same\")") ; hstack2 ->SetTitle("THStack::Draw(\"lego1\",\"same\")") ; hstack1 ->DrawClone("lego1,fb") ; hstack2->DrawClone("lego1,fb,same") ; canvas->SaveAs("THStack_lego_nostack.gif") ; canvas->SaveAs("THStack_lego_nostack.png") ; }