KAHIBARO
Discord Login Register

7.3. Graph Styling

Table of Contents

Markers

TGraph objects represent discrete measurements, so marker style is usually the most important visual choice. Each point can be drawn as a small symbol whose type, size, and color you control. By default, a TGraph uses a simple marker style, but you should set it explicitly for clarity and consistency.

You configure markers through the graph’s drawing attributes, for example:

cpp
TGraph *g = new TGraph(n, x, y);
g->SetMarkerStyle(20);   // full circle
g->SetMarkerSize(1.0);   // relative size
g->SetMarkerColor(kRed); // color from ROOT’s palette
g->Draw("AP");           // A = axes, P = markers (points)

ROOT identifies marker styles with integer codes. Some commonly used ones are circles, squares, triangles, and crosses. You can use a small subset to create a consistent style across all your plots. Colors are chosen through constants like kBlack, kRed, kBlue, or by passing an integer color index. Marker size is a dimensionless scale factor. Values around 0.8 to 1.2 are typically appropriate for figures, but may need adjustment depending on axis ranges and output resolution.

When comparing several datasets in one plot, vary both marker style and color so each graph is easy to distinguish even in black and white. At the same time, avoid using too many different combinations which can make the figure hard to read. If the dataset has many points that are close together, use smaller markers or partially transparent markers if you move to more advanced styling. For sparse data, larger markers make individual measurements more visible.

TGraphErrors and TGraphAsymmErrors will usually be drawn with markers plus error bars. The marker attributes still come from SetMarkerStyle, SetMarkerSize, and SetMarkerColor, so you can style these graphs exactly as you would a simple TGraph. Error bar color normally follows the line color, which you can also control if needed.

For publication quality figures it is good practice to test how your marker choices look when printed in grayscale, and to check that markers do not overlap so strongly that individual points are impossible to distinguish.

Important rule: Always set marker style, size, and color explicitly for each graph, especially when plotting multiple graphs together, so that your plots remain understandable and consistent.

Lines

Lines connect the points of a TGraph and can represent either an interpolated curve between measurements or a theoretical prediction. ROOT allows you to draw only markers, only lines, or a combination of both. The drawing option string controls this behavior. Common choices include "P" for markers only, "L" for lines only, and "PL" or "LP" for both together.

Line appearance is controlled with methods such as:

cpp
g->SetLineColor(kBlue);
g->SetLineWidth(2);
g->SetLineStyle(1);  // 1 = solid, 2 = dashed, etc.
g->Draw("AL");       // A = axes, L = line

Line width is usually a small integer. Values between 1 and 3 work well for most figures. Thicker lines help visibility on projectors and when printing, but very thick lines can hide details in dense regions. Line color should be chosen to contrast clearly with the background and with other curves in the same plot.

Line style is especially important when figures may be printed in black and white or when color reproduction is uncertain. Solid, dashed, and dotted lines with different patterns let you distinguish several curves even if the colors look similar. It is common to use solid lines for main results or data, and dashed or dotted lines for models, fits, or alternative hypotheses. When overlaying histograms and graphs, make sure that the combined choice of fill style, marker style, and line style does not lead to a cluttered appearance.

Sometimes you want to draw a smooth curve without markers, for example to show a theoretical function or a fit. A TGraph can be used for this if you choose enough points in x and use only line drawing options. Conversely, for purely experimental scatter plots where you do not want to suggest interpolation, markers without connecting lines are more appropriate.

For graphs with error bars, such as TGraphErrors, the "E" option adds vertical and horizontal bars. You can then optionally add "L" and "P" to combine lines and markers with the error bars. Styling the line and markers together gives a coherent visual identity to each dataset.

Important rule: Use line color and style to clearly distinguish different curves, and reserve solid, thicker lines for the most important results or reference curves in your graph.

Axes

Axes provide the context for your graph. For TGraph objects, axes appear the first time you draw the graph with options that include "A". Subsequent graphs drawn with the "SAME" option are overlaid on the existing axes, which keeps a single consistent coordinate system.

You can configure titles, label fonts and sizes, and numeric ranges using methods of the underlying histogram-like axis objects. These are accessed as:

cpp
g->GetXaxis()->SetTitle("x variable [units]");
g->GetYaxis()->SetTitle("y variable [units]");
g->GetXaxis()->SetTitleSize(0.05);
g->GetYaxis()->SetTitleSize(0.05);
g->GetXaxis()->SetLabelSize(0.04);
g->GetYaxis()->SetLabelSize(0.04);

Meaningful axis titles with units are essential in scientific plots. Choose clear, concise variable names, and always include the unit in square brackets when appropriate, for example "Energy [GeV]" or "Time [ns]". Title and label sizes should be large enough to be readable in the final output format, whether it is a slide, paper figure, or on-screen diagnostic plot. If labels collide or look cramped, you can adjust offsets:

cpp
g->GetXaxis()->SetTitleOffset(1.2);
g->GetYaxis()->SetTitleOffset(1.4);

Title offsets control the distance between the axis and its title and are particularly important for the vertical axis where titles can otherwise be very close to the numbers.

Axis ranges can be set in two main ways. You can let ROOT choose them automatically based on the data in the graph, or you can fix them yourself:

cpp
g->GetXaxis()->SetLimits(xmin, xmax);  // for TGraph
g->SetMinimum(ymin);
g->SetMaximum(ymax);

Manually fixing ranges is useful when comparing several graphs on the same canvas or when you want to highlight a particular region of interest. Consistent ranges across related figures make it easier for the reader to compare results.

You can also control the number and position of tick marks and numeric labels. By default ROOT chooses reasonable values, but for some applications you may want integer labels only or a specific step size. For more advanced control, you can use methods like SetNdivisions on the axis object.

When using logarithmic axes, which are configured at the pad or canvas level, make sure that your axis titles and tick labels clearly indicate the transformation, and that your data are strictly positive in the corresponding dimension. Axis styling should be checked carefully in log plots to ensure that minor and major ticks are readable and that labels do not overlap.

Important rule: Always set informative axis titles with units, and adjust axis ranges and text sizes so your graphs remain clear and readable in the final medium where they will be viewed.

Views: 18

Comments

Please login to add a comment.

Don't have an account? Register now!