Re: [ROOTDEV] Strange FillStyle for THStack?

From: Christian Hansen <christian.hansen_at_cern.ch>
Date: Tue, 8 Mar 2005 15:05:02 +0100 (CET)

Hi Rene,

This is maybe the technically expected behaviour but normally not the physically wanted behaviour. For example the h3 is added on top of h2 and h1 and does not fill behind h2 and h1, so why should the pattern of h3 (green vertical lines) be shown on the area of h2 and h1?
As another example, imagine this plot (upper left) to be in a paper, and if one want to refer to h1 in the text as the area with the horisontally lines, one cannot since there are also vertical and leaning lines above it.
I therefore strongly recomend that their should be a way to fill the area of a histogram with the style of only that histogram.

Best wishes
/Christian

> 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");
> >
> > }
>

-- 
/ 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

Received on Tue Mar 08 2005 - 15:04:55 MET

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