Dear Rene,
I also feel inconvenience for the expedted behavior of the FillStyle for THStack.
I prepared three plots as follows and they can be created with a script below.
Fig.1 : THStack::Draw("nostack"); //Hatches are blended. Fig.2 : THStack::Draw(); //Hatches are blended. Fig.3 : Stacked histograms with TH1::Draw("same"), which can be seen as hatches are not blended.
I am satisfied with the view of Fig.1.
I feel inconvenience for the case of Fig.2. In Fig2, the fill style of the legends don't match that of the histograms. Moreover, if I stack many histograms with THStack, a view of a lower stacked hisotgram becomes indistinguishable.
So I would like to present the stacked histograms with THStack like Fig.3. I think it is helpful if THStack::Draw() support a option to present stacked histograms like Fig.3.
Could you implement such a option someday?
Best Regards,
Hajime
///////////////////////////////////////////////////////////////////
//-------------------------------------------TH1F *h1 = new TH1F("h1","Histo 1",100,-5,5); h1->FillRandom("gaus",10000);
//-------------------------------------------TF1* gaus = (TF1*)gROOT->FindObject("gaus"); gaus->SetParameter(1,1.5);
h2->FillRandom("gaus",20000); //------------------------------------------- h1->SetFillStyle(3004); h1->SetFillColor(1); h2->SetFillStyle(3005); h2->SetFillColor(1); //-------------------------------------------THStack *hs = new THStack("hs","A stack of histograms");
hs->Add(h1); hs->Add(h2); //-------------------------------------------TLegend *leg = new TLegend(0.1,0.6,0.4,0.9);
leg->AddEntry(h1,"h1","f"); leg->AddEntry(h2,"h2","f"); //------------------------------------------- //------------------------------------------- c1->cd(1);
//------------------------------------------- //------------------------------------------- c1->cd(2);
//------------------------------------------- //-------------------------------------------c1->cd(3);
h0->SetTitle("hatch TH1F::Draw(\"same\")"); h0->Add(h2); h0->SetStats(0); TH1F* h1w = (TH1F*)h1->Clone("h1w");
leg2->AddEntry(h1,"h1","f"); leg2->AddEntry(h0,"h2","f"); leg2->DrawClone();
//-------------------------------------------
c1->cd();
c1->SaveAs("c1.ps");
}
/////////////////////////////////////////////////////////////////
>
> 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 - 09:24:39 MET
This archive was generated by hypermail 2.2.0 : Tue Jan 02 2007 - 14:45:05 MET