Re: [ROOTDEV] Strange FillStyle for THStack?

From: Rene BRUN <rene.brun_at_cern.ch>
Date: Tue, 08 Mar 2005 08:16:08 +0100


Hi Christian,

This is the expected behaviour. Each histogram in the stack is paint on top of the previous one. One could modify the algorithm to paint only the difference between histograms, but this requires a bit of work to take into account correctly the bins with no content.

Rene brun

Christian Hansen wrote:
> Dear Rooters,
>
> is there anyway to stop fill styles of different
> histograms in a histogram stack to mix?
>
> For example, I used $ROOTSYS/tutorials/hstack.C
> and added only three lines (see attachement);
> h1->SetFillStyle(3007);
> h2->SetFillStyle(3004);
> h3->SetFillStyle(3006);
>
> The result from the edited hstack.C shows in the
> upper left corner the stacked histograms, but now
> with different fill styles.
>
> One can see that the green vertical lines of h3
> continues down and fills also h2 and h1. Is there
> a way to force h1 to ONLY be filled with the red
> horisontal lines, h2 to ONLY be filled with the
> blue leaning lines and h3 to only be filled with
> the green vertical lines?
>
> Best regards
> / Christian Hansen
>
> ===============================================
> Box 535 Office: +46-(0)18-471 32 57
> S-751 21 Uppsala Office: 82104
> Sweden
> -----------------------------------------------
> Mobile : +46-(0)708-887617
> Home Page : http://welcome.to/Christian_Hansen
> http://www.cern.ch/Christian.Hansen
>
>
> ------------------------------------------------------------------------
>
> void hstack() {
> // Example of stacked histograms: class THStack
> //
> // Author: Rene Brun
>
> THStack *hs = new THStack("hs","test stacked histograms");
> //create three 1-d histograms
> TH1F *h1 = new TH1F("h1","test hstack",100,-4,4);
> h1->FillRandom("gaus",20000);
> h1->SetFillColor(kRed);
> h1->SetFillStyle(3007); // <-- NEW
> h1->SetMarkerStyle(21);
> h1->SetMarkerColor(kRed);
> hs->Add(h1);
> TH1F *h2 = new TH1F("h2","test hstack",100,-4,4);
> h2->FillRandom("gaus",15000);
> h2->SetFillColor(kBlue);
> h2->SetFillStyle(3004); // <-- NEW
> h2->SetMarkerStyle(21);
> h2->SetMarkerColor(kBlue);
> hs->Add(h2);
> TH1F *h3 = new TH1F("h3","test hstack",100,-4,4);
> h3->FillRandom("gaus",10000);
> h3->SetFillColor(kGreen);
> h3->SetFillStyle(3006); // <-- NEW
> h3->SetMarkerStyle(21);
> h3->SetMarkerColor(kGreen);
> hs->Add(h3);
>
> TCanvas *c1 = new TCanvas("c1","stacked hists",10,10,1000,800);
> c1->SetFillColor(41);
> c1->Divide(2,2);
> // in top left pad, draw the stack with defaults
> c1->cd(1);
> hs->Draw();
> // in top right pad, draw the stack in non-stack mode and errors option
> c1->cd(2);
> gPad->SetGrid();
> hs->Draw("nostack,e1p");
> //in bottom left, draw in stack mode with "lego1" option
> c1->cd(3);
> gPad->SetFrameFillColor(17);
> gPad->SetTheta(3.77);
> gPad->SetPhi(2.9);
> hs->Draw("lego1");
>
> c1->cd(4);
> //create two 2-D histograms and draw them in stack mode
> gPad->SetFrameFillColor(17);
> THStack *a = new THStack("a","test legos");
> TF2 *f1 = new TF2("f1","xygaus + xygaus(5) + xylandau(10)",-4,4,-4,4);
> Double_t params[] = {130,-1.4,1.8,1.5,1, 150,2,0.5,-2,0.5, 3600,-2,0.7,-3,0.3};
> f1->SetParameters(params);
> TH2F *h2a = new TH2F("h2a","h2a",20,-4,4,20,-4,4);
> h2a->SetFillColor(38);
> h2a->FillRandom("f1",4000);
> TF2 *f2 = new TF2("f2","xygaus + xygaus(5)",-4,4,-4,4);
> Double_t params[] = {100,-1.4,1.9,1.1,2, 80,2,0.7,-2,0.5};
> f2->SetParameters(params);
> TH2F *h2b = new TH2F("h2b","h2b",20,-4,4,20,-4,4);
> h2b->SetFillColor(46);
> h2b->FillRandom("f2",3000);
> a->Add(h2a);
> a->Add(h2b);
> a->Draw();
>
> c1->Print("stackTest.eps");
>
> }
Received on Tue Mar 08 2005 - 08:16:15 MET

This archive was generated by hypermail 2.2.0 : Tue Jan 02 2007 - 14:45:05 MET