Re: [ROOT] 2.25.03: setting TPad transparency and fill color simultaneously

From: Rene Brun (Rene.Brun@cern.ch)
Date: Tue Dec 05 2000 - 16:31:53 MET


Hi Stephen,
The following script shows 3 histograms superimposed with "transparent"
fill areas. This technique works on the screen and on Postscript.
Semi transparent images are difficult to get with Postscript.

Rene Brun

{
   TH1F h1("h1","background",100,-4,4);
   h1.FillRandom("gaus",25000);
   h1.SetFillColor(38);
   h1.Draw();
   TH1F h2("h2","foreground",100,-4,4);
   TF1 f2("f2","gaus",-3,-1);
   f2.SetParameters(1,-2,0.5);
   h2.FillRandom("f2",5000);
   h2.SetFillStyle(3010);
   h2.SetFillColor(41);
   h2.Draw("same");
   TH1F h3("h2","foreground",100,-4,4);
   TF1 f3("f3","gaus",-1.5,-0.5);
   f3.SetParameters(1,-1,0.15);
   h3.FillRandom("f3",3500);
   h3.SetFillStyle(3012);
   h3.SetFillColor(50);
   h3.Draw("same");
}

Stephen Bailey wrote:
> 
> Hi Matt.
> 
> Here's a trick I use frequently to highlight a cut region:
> Draw a dummy 2D histogram to get the axis ranges, then draw
> a box for the cut region, and then draw the scatter plot with
> the "same" option.  e.g.
> 
> {
> // Run $ROOTSYS/tutorials/hsimple.C first if this file doesn't exist
> TFile fi("$ROOTSYS/tutorials/hsimple.root", "Read");
> 
> // Dummy Histogram for making the boundaries
> TH2F h2("h2", "", 1, -4, 4, 1, -4, 4);
> 
> // Box to highlight a region
> TBox box(0, 0, 4, 4);
> box.SetFillColor(5);
> 
> // Draw the histogram, then the box, then the scatter plot
> h2.Draw();
> box.Draw();
> gPad->RedrawAxis();  // since the box obscures the ticks
> ntuple.Draw("px:py", "", "same");
> }
> 
> I was also disappointed to discover that the TPad transparency
> didn't blend colors.  I think it would be great if the transparency
> options of AttFill did full alpha blending.  I would use it, e.g.,
> when drawing one 1D histogram that overlaps another when I don't want
> to completely obscure the histogram in the background.
> 
> Stephen
> 
> On Mon, 4 Dec 2000, Matthew D. Langston wrote:
> 
> > Hi all,
> >
> > I think I am trying to go about setting the transparency and fill color of a
> > TPad in the wrong way.
> >
> > The problem I am trying to solve is to highlight a small section of a
> > scatterplot.  The area of the scatterplot I want to highlight represents a
> > cut.  My first attempt to do this was to put a TPad on top of the
> > scatterplot and set the TPad's transparency to 4050 (i.e. semi-transparent)
> > and its fill color to 2 (i.e. red).
> >
> > I did this as follows:
> >
> > myPad->SetFillStyle( 4050 );
> > myPad->SetFillColor( 2 );
> > myPad->Modified();
> > myPad->Update();
> >
> > The last two commands (i.e. the calls to Modified and Update) don't do
> > anything from the command line.  I have to use the SetFillAttributes context
> > menu of myPad to set the fill color to red by clicking the Apply button.  Is
> > this right?  Isn't there a way to do this from the command line?
> >
> > It appears that only one of these settings (i.e. transparency and fill
> > color) can take affect at the same time, i.e. I can either have a
> > semi-transparent TPad that has no color (so that I can see the scatterplot
> > points below it), a solid red TPad (that hides the scatterplot points
> > beneath it), but not both.
> >
> > So, is it possible to set the transparency and the fill color of a TPad
> > simultaneously?  If so, is there a way to do it from the command line?
> >
> > Also, is this the right way to highlight a section of a scatterplot?  Would
> > it be better to use something like a TBox or a TWbox instead?
> >
> > Thank you for any help.
> >
> > Regards, Matt
> >
> > --
> > Matthew D. Langston
> > SLD, Stanford Linear Accelerator Center
> > langston@SLAC.Stanford.EDU
> >



This archive was generated by hypermail 2b29 : Tue Jan 02 2001 - 11:50:38 MET