# Graphs

A graph is an object made of two (
TGraph
) or three
(
TGraph2D
) arrays `X`

, `Y`

and `Z`

holding the `x`

,`y`

and `z`

coordinates of n points.

**Un-binned data**

A graph or chart is a set of categorical variables, this is un-binned data unlike a histogram which holds continuous data, where the bins represent ranges of data (binned data), see → Histograms.

→ Graph tutorials## Graph classes

ROOT provides numerous graph classes:

**X-Y graphs**

TGraph: A graph.

TGraphErrors: A graph with symmetric error bars.

TGraphAsymmErrors: A graph with asymmetric error bars.

TGraphBentErrors: A TGraph with bent, asymmetric error bars.

TGraphMultiErrors: A TGraph with asymmetric error bars and multiple y error dimensions.

TGraphPolar: A TGraphErrors represented in polar coordinates.

TGraphQQ: Draws quantile-quantile plots.

TMultiGraph: A collection of TGraph (or derived) objects.

**X-Y-Z graphs**

TGraph2D: A graph made of three arrays X, Y and Z with the same number of points each.

TGraph2DErrors: A TGraph2D with error bars.

## Working with TGraph

This section explains how to work with a TGraph an its derived classes. It covers the creation, the drawing and the fitting.

### Creating a graph

- Use one of the TGraph constructor to create a graph object.

TGraph , and its derived classes, offers a wide variety of constructors. A TGraph can be created from an ASCII file, from a TF1 , from a histogram etc … The most common way being the creation from C++ arrays.

**Example**

Arrays of coordinates are defined and then the graph is created with the TGraph constructor. The coordinates can be arrays of doubles or floats.

When the number of points to be stored in the graph is not known AddPoint can be used:

### Drawing a graph

- Use the TGraph::Draw() method to draw a graph. Several drawing options are available.

**Example**

*Figure: Graph drawn with Draw().*

The “drawing option” is the unique parameter (case insensitive) of the TGraph::Draw() method. It specifies how the graph will be graphically rendered.

**Example**

*Figure: Graph drawn with Draw(“AL*”).*

#### Setting titles for a graph

On the previous plot the graph title is “Graph”. It is the default graph title. The axis have no titles. Once a graph is created it is possible to change the graph and axis titles using TGraph::SetTitle() method.

You can use the TAxis::CenterTitle method to center the title. Note this acts on the axis which are available only once the graph has been drawn.

**Example**

*Figure: Graph with titles.*

### Zooming a graph

To zoom a graph you can first draw a frame with the wanted limits and then draw the graph in it

**Example**

*Figure: A zoomed graph.*

See also “How to set ranges on axis”

### Fitting graphs

- Use the graph
`Fit()`

methods (for example TGraph::Fit()), for fitting graphs.

For more information on the `Fit()`

method, → see Fitting histograms.

## Graphs with error bars

A TGraphErrors is a TGraph with error bars.

Several drawing options are available for graphs with error bars.

TGraphErrors uses 4 parameters: X, Y (as in TGraph ), X-errors, and Y-errors (the size of the errors in the x and y direction).

When the errors are not symmetric use TGraphAsymmErrors . It uses 4 vectors to define the errors. The drawing options are the same as those for TGraphErrors

TGraphBentErrors is similar to TGraphAsymmErrors but it has 4 extra parameters to shift (bent) the error bars. This is useful when several graphs are drawn on the same plot and may hide each other.

TGraphMultiErrors is an other kind of % include ref class=”TGraphAsymmErrors” %} but multiple y error dimensions. It has a set of specific drawing options.

TGraphPolar is an other kind ot graph with errors. It allows to produce polar plots with several plotting options.

## Graphs with exclusion zone

It is possible to draw a graph with an exclusion zone.
When drawn with options `C`

or `L`

one side of the graph is hatched.

## Reverse axis

Sometimes it is useful to draw the axis “reversed”. Ie: the X axis with its minimum on the right and its maximum on left of the plot and the Y axis its minimum on top and its maximum at the bottom of the plot. Some special drawing options allow to do that.

## Logarithmic scale

Logarithmic scales can be selected for the X and Y axis of a graph. But only the points building the graphs are changed into log scale. Not the lines connecting them.

## TMultiGraph

A TMultiGraph is a collection of TGraph (or derived) objects.

### Creating a TMultiGraph

- Use TMultiGraph::Add() to add a new graph to the list.

The TMultiGraph owns the objects in the list. The drawing and fitting options are the same as for TGraph.

**Example**

*Figure: Graph with error bars.*

### Drawing a TMultiGraph

TMultiGraph drawing is similar to graph drawing and setting titles is the same. Automatic coloring and reverse axis drawing are also available.

A specific option allows to draw the graph collection in 3D.

When a legend is created using TPad::BuildLegend all the graphs collected in a TMultiGraph are added in the legend.

### Zooming a TMultiGraph

TMultiGraph limits are automatically computed from the ranges of the graphs buiding it. It is also possible to impose axis limits.

### Fitting a TMultiGraph

When graphs are stored in a TMultiGraph they are considered as a single set of point by the fitting mechanism.

## Automatic coloring

When several graphs are drawn on the same plot, it is possible to pick automatically the color of each graph in the current color palette.

## TGraphQQ

A TGraphQQ allows to draw quantile-quantile plots. Such plots can be drawn for two datasets, or for one dataset and a theoretical distribution function.

## TGraph2D

A
TGraph2D
graph is a graphics object that is made of three
arrays `X`

, `Y`

and `Z`

with the same number of points each.

TGraph2DErrors derives from TGraph2D . It adds 3 extra vectors to define the errors.

### Creating a TGraph2D

- Use one of the TGraph2D constructors to create a 2D graph.

TGraph2D
(and
TGraph2DErrors
) have several
constructors. For instances
from three arrays `x`

, `y`

, and `z`

(can be arrays of doubles, floats, or integers),
from an ASCII file, or even
without parameter (in that case use the `SetPoint()`

method to
fill the internal arrays).

### Drawing a TGraph2D

You can draw a TGraph2D with any drawing option valid for 2D histogram. In this case, an intermediate 2D histogram is filled using the Delaunay triangles technique to interpolate the data set.

You can also use the specific TGraph2D drawing options

**Example**

*Figure: A TGraph2D with the drawing option TRI1 and P0.*

### Fitting a TGraph2D

Some tutorials show how to fit TGraph2D and TGraph2DErrors.