Re: Re: [ROOTDEV] Strange FillStyle for THStack?

From: Olivier Couet <couet_at_mail.cern.ch>
Date: Tue, 8 Mar 2005 15:34:37 +0100 (CET)

Hi Christian,

 We got the same question from Hajime Nanjo. I am working on that problem.

Cheers, Olivier

On Tue, 8 Mar 2005, Christian Hansen wrote:

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

-- 
Org:    CERN - European Laboratory for Particle Physics.
Mail:   1211 Geneve 23 - Switzerland                     Mailbox: J25910      
E-Mail: Olivier.Couet_at_cern.ch                            Phone:   +41 22 7676522
WWW:    http://cern.ch/Olivier.Couet/                    Fax:     +41 22 7670300
Received on Tue Mar 08 2005 - 15:35:41 MET

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