First declare the values and the errors on the Y axis.
In [1]:
std::vector<double> x_vals {1,2,3,4,5,6,7,8,9,10};
std::vector<double> y_vals {6,12,14,20,22,24,35,45,44,53};
std::vector<double> y_errs {5,5,4.7,4.5,4.2,5.1,2.9,4.1,4.8,5.43};
auto n_points = x_vals.size();
Create the instance of the graph. The errors along the x axis are set to zero passing a nullptr.
In [2]:
TGraphErrors graph(n_points, x_vals.data(), y_vals.data(), nullptr, y_errs.data());
graph.SetTitle("Measurement XYZ;lenght [cm];Arb.Units");
Make the plot look better.
In [3]:
graph.SetMarkerStyle(kOpenCircle);
graph.SetMarkerColor(kBlue);
graph.SetLineColor(kBlue);
Create the canvas and draw the graph.
In [4]:
TCanvas mycanvas;
graph.Draw("APE");
Define a linear function.
In [5]:
TF1 f("Linear law", "[0]+x*[1]", .5, 10.5);
Let's make the funcion line nicer.
In [6]:
f.SetLineColor(kRed);
f.SetLineStyle(2);
Now fit the function to the graph and draw it.
In [7]:
graph.Fit(&f);
f.Draw("Same");
Build and draw a legend.
In [8]:
TLegend leg(.1, .7, .3, .9, "Lab. Lesson 1");
leg.SetFillColor(0);
graph.SetFillColor(0);
leg.AddEntry(&graph, "Exp. Points");
leg.AddEntry(&f, "Th. Law");
leg.Draw("Same");
Draw an arrow on the canvas.
In [9]:
TArrow arrow(8, 8, 6.2, 23, 0.02, "|>");
arrow.SetLineWidth(2);
arrow.Draw();
Add some text to the plot.
In [10]:
TLatex text(8.2, 7.5, "#splitline{Maximum}{Deviation}");
text.Draw();
Display in the notebook what is in your canvas. Note how we first activate the interactive JavaScript visualisation.
In [11]:
%jsroot on
mycanvas.Draw();
Save the content of your canvas to an image file on disk.
In [12]:
mycanvas.Print("graph_with_law.pdf");