Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
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 
13 void annotation3d()
14 {
15  TCanvas *c = new TCanvas("c", "c", 600, 600);
16  c->SetTheta(30);
17  c->SetPhi(50);
18  gStyle->SetOptStat(0);
19  gStyle->SetHistTopMargin(0);
20  gStyle->SetOptTitle(kFALSE);
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 }