Logo ROOT  
Reference Guide
annotation3d.C
Go to the documentation of this file.
1/// \file
2/// \ingroup tutorial_graphs
3/// \notebook
4/// This example show how to put some annotation on a 3D plot using 3D
5/// polylines. It also demonstrates how the axis labels can be modified.
6/// It was created for the book:
7/// [Statistical Methods for Data Analysis in Particle Physics](http://www.springer.com/la/book/9783319201757)
8/// \macro_image
9/// \macro_code
10///
11/// \author Luca Lista
12
13void annotation3d()
14{
15 TCanvas *c = new TCanvas("c", "c", 600, 600);
16 c->SetTheta(30);
17 c->SetPhi(50);
21
22 // Define and draw a surface
23 TF2 *f = new TF2("f", "[0]*cos(x)*cos(y)", -1, 1, -1, 1);
24 f->SetParameter(0, 1);
25 double s = 1./f->Integral(-1, 1, -1, 1);
26 f->SetParameter(0, s);
27 f->SetNpx(50);
28 f->SetNpy(50);
29
30 f->GetXaxis()->SetTitle("x");
31 f->GetXaxis()->SetTitleOffset(1.4);
32 f->GetXaxis()->SetTitleSize(0.04);
33 f->GetXaxis()->CenterTitle();
34 f->GetXaxis()->SetNdivisions(505);
35 f->GetXaxis()->SetTitleOffset(1.3);
36 f->GetXaxis()->SetLabelSize(0.03);
37 f->GetXaxis()->ChangeLabel(2,-1,-1,-1,kRed,-1,"X_{0}");
38
39 f->GetYaxis()->SetTitle("y");
40 f->GetYaxis()->CenterTitle();
41 f->GetYaxis()->SetTitleOffset(1.4);
42 f->GetYaxis()->SetTitleSize(0.04);
43 f->GetYaxis()->SetTitleOffset(1.3);
44 f->GetYaxis()->SetNdivisions(505);
45 f->GetYaxis()->SetLabelSize(0.03);
46
47 f->GetZaxis()->SetTitle("dP/dx");
48 f->GetZaxis()->CenterTitle();
49 f->GetZaxis()->SetTitleOffset(1.3);
50 f->GetZaxis()->SetNdivisions(505);
51 f->GetZaxis()->SetTitleSize(0.04);
52 f->GetZaxis()->SetLabelSize(0.03);
53
54 f->SetLineWidth(1);
55 f->SetLineColorAlpha(kAzure-2, 0.3);
56
57 f->Draw("surf1 fb");
58
59 // Lines for 3D annotation
60 double x[11] = {-0.500, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.5, -0.500};
61 double y[11] = {-0.985, -0.8, -0.6, -0.4, -0.2, 0.0, 0.2, 0.4, 0.6, 0.8, 0.985};
62 double z[11];
63 for (int i = 0; i < 11; ++i) z[i] = s*cos(x[i])*cos(y[i]);
64 TPolyLine3D *g2 = new TPolyLine3D(11, x, y, z);
65
66 double xx[2] = {-0.5, -0.5};
67 double yy[2] = {-0.985, -0.985};
68 double zz[2] = {0.11, s*cos(-0.5)*cos(-0.985)};
69 TPolyLine3D *l2 = new TPolyLine3D(2, xx, yy, zz);
70
71 g2->SetLineColor(kRed);
72 g2->SetLineWidth(3);
73 g2->Draw();
74
75 l2->SetLineColor(kRed);
76 l2->SetLineStyle(2);
77 l2->SetLineWidth(1);
78 l2->Draw();
79
80 // Draw text Annotations
81 TLatex *txt = new TLatex(0.05, 0, "f(y,x_{0})");
82 txt->SetTextFont(42);
83 txt->SetTextColor(kRed);
84 txt->Draw();
85
86 TLatex *txt1 = new TLatex(0.12, 0.52, "f(x,y)");
87 txt1->SetTextColor(kBlue);
88 txt1->SetTextFont(42);
89 txt1->Draw();
90}
#define f(i)
Definition: RSha256.hxx:104
#define c(i)
Definition: RSha256.hxx:101
const Bool_t kFALSE
Definition: RtypesCore.h:101
@ kRed
Definition: Rtypes.h:66
@ kBlue
Definition: Rtypes.h:66
@ kAzure
Definition: Rtypes.h:67
R__EXTERN TStyle * gStyle
Definition: TStyle.h:414
virtual void SetLineStyle(Style_t lstyle)
Set the line style.
Definition: TAttLine.h:42
virtual void SetLineWidth(Width_t lwidth)
Set the line width.
Definition: TAttLine.h:43
virtual void SetLineColor(Color_t lcolor)
Set the line color.
Definition: TAttLine.h:40
virtual void SetTextColor(Color_t tcolor=1)
Set the text color.
Definition: TAttText.h:44
virtual void SetTextFont(Font_t tfont=62)
Set the text font.
Definition: TAttText.h:46
The Canvas class.
Definition: TCanvas.h:23
A 2-Dim function with parameters.
Definition: TF2.h:29
To draw Mathematical Formula.
Definition: TLatex.h:18
virtual void Draw(Option_t *option="")
Default Draw method for all objects.
Definition: TObject.cxx:274
A 3-dimensional polyline.
Definition: TPolyLine3D.h:33
void Draw(Option_t *option="") override
Draw this 3-D polyline with its current attributes.
void SetOptTitle(Int_t tit=1)
Definition: TStyle.h:319
void SetOptStat(Int_t stat=1)
The type of information printed in the histogram statistics box can be selected via the parameter mod...
Definition: TStyle.cxx:1589
void SetHistTopMargin(Double_t hmax=0.05)
Definition: TStyle.h:369
RVec< PromoteType< T > > cos(const RVec< T > &v)
Definition: RVec.hxx:1798
Double_t y[n]
Definition: legend1.C:17
Double_t x[n]
Definition: legend1.C:17
static constexpr double s