Logo ROOT  
Reference Guide
 
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
Loading...
Searching...
No Matches
annotation3d.C File Reference

Detailed Description

View in nbviewer Open in SWAN
This example show how to put some annotation on a 3D plot using 3D polylines.

It also demonstrates how the axis labels can be modified. It was created for the book: Statistical Methods for Data Analysis in Particle Physics

{
auto c = new TCanvas("c", "c", 600, 600);
c->SetTheta(30);
c->SetPhi(50);
// Define and draw a surface
auto f = new TF2("f", "[0]*cos(x)*cos(y)", -1, 1, -1, 1);
f->SetParameter(0, 1);
double s = 1. / f->Integral(-1, 1, -1, 1);
f->SetParameter(0, s);
f->SetNpx(50);
f->SetNpy(50);
f->GetXaxis()->SetTitle("x");
f->GetXaxis()->SetTitleOffset(1.4);
f->GetXaxis()->SetTitleSize(0.04);
f->GetXaxis()->CenterTitle();
f->GetXaxis()->SetNdivisions(505);
f->GetXaxis()->SetTitleOffset(1.3);
f->GetXaxis()->SetLabelSize(0.03);
f->GetXaxis()->ChangeLabelByValue(-0.5, -1, -1, -1, kRed, -1, "X_{0}");
f->GetYaxis()->SetTitle("y");
f->GetYaxis()->CenterTitle();
f->GetYaxis()->SetTitleOffset(1.4);
f->GetYaxis()->SetTitleSize(0.04);
f->GetYaxis()->SetTitleOffset(1.3);
f->GetYaxis()->SetNdivisions(505);
f->GetYaxis()->SetLabelSize(0.03);
f->GetZaxis()->SetTitle("dP/dx");
f->GetZaxis()->CenterTitle();
f->GetZaxis()->SetTitleOffset(1.3);
f->GetZaxis()->SetNdivisions(505);
f->GetZaxis()->SetTitleSize(0.04);
f->GetZaxis()->SetLabelSize(0.03);
f->SetLineWidth(1);
f->SetLineColorAlpha(kAzure - 2, 0.3);
f->Draw("surf1 fb");
// Lines for 3D annotation
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};
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};
double z[11];
for (int i = 0; i < 11; ++i)
z[i] = s * cos(x[i]) * cos(y[i]);
auto g2 = new TPolyLine3D(11, x, y, z);
double xx[2] = {-0.5, -0.5};
double yy[2] = {-0.985, -0.985};
double zz[2] = {0.11, s * cos(-0.5) * cos(-0.985)};
auto l2 = new TPolyLine3D(2, xx, yy, zz);
g2->SetLineColor(kRed);
g2->SetLineWidth(3);
g2->Draw();
l2->SetLineColor(kRed);
l2->SetLineStyle(kDashed);
l2->SetLineWidth(1);
l2->Draw();
// Draw text Annotations
TAnnotation *txt = new TAnnotation(-0.45, -0.2, 0.3, "f(y,x_{0})");
txt->SetTextFont(42);
txt->SetTextColor(kRed);
txt->Draw();
TAnnotation *txt1 = new TAnnotation(0.5, 0.5, 0.3, "f(x,y)");
txt1->SetTextColor(kBlue);
txt1->SetTextFont(42);
txt1->Draw();
}
#define f(i)
Definition RSha256.hxx:104
#define c(i)
Definition RSha256.hxx:101
constexpr Bool_t kFALSE
Definition RtypesCore.h:94
@ kRed
Definition Rtypes.h:66
@ kBlue
Definition Rtypes.h:66
@ kAzure
Definition Rtypes.h:67
@ kDashed
Definition TAttLine.h:52
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
R__EXTERN TStyle * gStyle
Definition TStyle.h:442
An annotation is a TLatex which can be drawn in a 2D or 3D space.
Definition TAnnotation.h:18
The Canvas class.
Definition TCanvas.h:23
A 2-Dim function with parameters.
Definition TF2.h:29
A 3-dimensional polyline.
Definition TPolyLine3D.h:33
void SetOptTitle(Int_t tit=1)
Definition TStyle.h:338
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:1642
void SetHistTopMargin(Double_t hmax=0.05)
Definition TStyle.h:389
Double_t y[n]
Definition legend1.C:17
Double_t x[n]
Definition legend1.C:17
Author
Luca Lista, Olivier Couet

Definition in file annotation3d.C.