# SciRooPlot API reference

Generated by `scripts/generate-api-reference.py` from the headers in `include/SciRooPlot` — do not edit by hand.
Types: `std::optional<T>` arguments can be left out (Python: `None`); `std::vector` arguments take `{...}` in C++ and lists in Python;
`draw_option_t` is one of the aliases listed in `drawing-options.md`; colours, styles and fonts are ROOT constants (`kRed + 1`, `kFullCircle`, `kDashed`, 43).

## PlotManager
*central object: data sources, plots, base plots, project files*

- `PlotManager(const std::string& projectName = "")`
- `void SaveProject()`
- `void AddDataSource(const std::string& dataSource, const std::vector<std::string>& inputs, bool replace = false)`
- `void AddDataSource(const std::string& dataSource, const std::string& input, bool replace = false)`
- `void AddDataSource(const std::string& dataSource, const std::vector<TObject*>& inputs, bool replace = false)`
- `void AddDataSource(const std::string& dataSource, TObject* input, bool replace = false)`
- `void SaveDataSources(const std::optional<std::string>& file = {})`
- `void LoadDataSources(const std::optional<std::string>& file = {}, bool replace = false)`
- `void AddPlot(Plot plot)`
- `void AddBasePlot(Plot basePlot)`
- `Plot MakeBasePlot(const std::string& name = "1d")`
- `Plot MakeBasePlot(const std::string& name, const PanelLayout& sizes)`
- `void AddColorOverview(const std::string& name, const std::string& group, const std::vector<int32_t>& colors = {})`
- `void SavePlots(const std::string& name = ".+", const std::string& group = ".+", const std::optional<std::string>& file = {})`
- `bool LoadPlots(const std::string& name = ".+", const std::string& group = ".+", const std::optional<std::string>& file = {})`
- `bool GeneratePlots(const std::string& mode = "show", const std::string& name = ".+", const std::string& group = ".+")`
- `void ListPlots()`
- `void ClearDataBuffer()`
- `void ClearCanvasRegistry()`
- `std::string GetProjectProperty(const std::string& property)`
- `void SetOutputDirectory(const std::string& path)`
- `void SetPlotsRootFile(const std::string& fileName)`
- `void SetDataRootFile(const std::string& fileName)`

## Plot
*plot[padID] gives the Pad (padID 0: defaults for all pads)*

- `Plot()`
- `Plot(const std::string& name, const std::string& group = "", const std::optional<std::string>& basePlot = {})`
- `Plot(const std::string& name, const PanelLayout& layout)` — a base plot with the panels and lengths of the layout (see PanelLayout.h)
- `Pad& GetPad(uint8_t padID)`
- `Plot(const Plot& otherPlot, const std::string& name, const std::optional<std::string>& group = {})`
- `Plot& SetName(const std::string& name)`
- `Plot& SetGroup(const std::string& group)`
- `Plot& AppendGroup(const std::string& subgroup)`
- `Plot& SetBasePlot(const std::string& name)`
- `Plot& SetDimensions(int32_t width, int32_t height, bool fixAspectRatio = false)`
- `Plot& SetWidth(int32_t width)`
- `Plot& SetHeight(int32_t height)`
- `Plot& SetFixAspectRatio(bool fixAspectRatio = true)`
- `Plot& SetFill(int16_t color, std::optional<int16_t> style = {}, std::optional<float_t> alpha = {})`
- `Plot& SetFillColor(int16_t color)`
- `Plot& SetFillStyle(int16_t style)`
- `Plot& SetFillAlpha(float_t alpha)`
- `Plot& SetTransparent()`

## Plot::Pad
*pad[axis] gives the Axis ('X', 'Y', 'Z'); pad(dataID) the Data (counting from 1)*

- `Pad()`
- `Data& operator()(uint8_t dataID)`
- `Data& AddData(const std::string& name, const std::string& dataSource, const std::optional<std::string>& label = {})`
- `Data& AddData(const Data& data, const std::optional<std::string>& label = {})`
- `Data& AddData(const std::string& name, const Data& settings, const std::optional<std::string>& label = {})` — deprecated
- `Data& AddFunction(const std::string& function, const std::optional<std::string>& label = {})`
- `Data& AddPoints(const std::vector<double_t>& x, const std::vector<double_t>& y, const std::optional<std::string>& label = {})`
- `Data& AddPoints(const std::vector<std::pair<double_t, double_t>>& positions, const std::optional<std::string>& label = {})`
- `Data& AddLine(std::pair<double_t, double_t> pos1, std::pair<double_t, double_t> pos2, const std::optional<std::string>& label = {})`
- `Ratio& AddRatio(const Data& numerator, const Data& denominator, const std::optional<std::string>& label = {})`
- `Ratio& AddRatio(const Ratio& ratio, const std::optional<std::string>& label = {})`
- `Ratio& AddRatio(const std::string& numeratorName, const std::string& numeratorDataSource, const std::string& denominatorName, const std::string& denominatorDataSource, const std::optional<std::string>& label = {})`
- `Ratio& AddRatio(const std::string& numeratorName, const Data& numeratorSettings, const std::string& denominatorName, const std::string& denominatorDataSource, const std::optional<std::string>& label = {})`
- `Ratio& AddRatio(const std::string& numeratorName, const Data& numeratorSettings, const std::string& denominatorName, const Data& denominatorSettings, const std::optional<std::string>& label = {})`
- `Ratio& AddRatio(const std::string& numeratorName, const std::string& numeratorDataSource, const std::string& denominatorName, const Data& denominatorSettings, const std::optional<std::string>& label = {})`
- `TextBox& AddText(double_t xPos, double_t yPos, const std::string& text)`
- `TextBox& AddText(double_t xPos, double_t yPos, const std::vector<std::string>& lines)`
- `TextBox& AddText(const std::string& text)`
- `TextBox& AddText(const std::vector<std::string>& lines)`
- `TextBox& AddText(box_placement_t placement, const std::string& text)`
- `TextBox& AddText(box_placement_t placement, const std::vector<std::string>& lines)`
- `LegendBox& AddLegend(double_t xPos, double_t yPos, const std::optional<std::string>& title = {})`
- `LegendBox& AddLegend(const std::optional<std::string>& title = {})`
- `LegendBox& AddLegend(box_placement_t placement, const std::optional<std::string>& title = {})`
- `Axis& GetAxis(const char axis)`
- `Data& GetData(uint8_t dataID)`
- `LegendBox& GetLegend(uint8_t legendID)`
- `TextBox& GetText(uint8_t textID)`
- `Data& SetRefFunc(const std::string& refFunc)`
- `Pad& SetPosition(double_t xlow, double_t ylow, double_t xup, double_t yup)`
- `Pad& SetMargins(float_t top, float_t bottom, float_t left, float_t right)`
- `Pad& SetTopMargin(float_t top)`
- `Pad& SetBottomMargin(float_t bottom)`
- `Pad& SetRightMargin(float_t right)`
- `Pad& SetLeftMargin(float_t left)`
- `Pad& SetView(double_t theta, double_t phi)`
- `Pad& SetPalette(int32_t palette)`
- `Pad& SetPalette(const std::vector<std::tuple<float_t, float_t, float_t, float_t>>& rgbEndpoints, std::optional<float_t> alpha = {}, std::optional<int32_t> nColors = {})`
- `Pad& SetDefaultTextSize(float_t size)`
- `Pad& SetDefaultTextColor(int16_t color)`
- `Pad& SetDefaultTextAlpha(float_t alpha)`
- `Pad& SetDefaultTextFont(int16_t font)`
- `Pad& SetDefaultAlpha(float_t alpha)`
- `Pad& SetDefaultColors(const std::vector<int16_t>& colors)`
- `Pad& SetDefaultColors(const std::vector<std::tuple<float_t, float_t, float_t, float_t>>& rgbEndpoints, std::optional<float_t> alpha = {}, std::optional<int32_t> nColors = {})`
- `Pad& SetDefaultMarkerAlpha(float_t alpha)`
- `Pad& SetDefaultMarkerSize(float_t size)`
- `Pad& SetDefaultMarkerColors(const std::vector<int16_t>& colors)`
- `Pad& SetDefaultMarkerColors(const std::vector<std::tuple<float_t, float_t, float_t, float_t>>& rgbEndpoints, std::optional<float_t> alpha = {}, std::optional<int32_t> nColors = {})`
- `Pad& SetDefaultMarkerStyles(const std::vector<int16_t>& styles)`
- `Pad& SetDefaultLineAlpha(float_t alpha)`
- `Pad& SetDefaultLineWidth(float_t width)`
- `Pad& SetDefaultLineColors(const std::vector<int16_t>& colors)`
- `Pad& SetDefaultLineColors(const std::vector<std::tuple<float_t, float_t, float_t, float_t>>& rgbEndpoints, std::optional<float_t> alpha = {}, std::optional<int32_t> nColors = {})`
- `Pad& SetDefaultLineStyles(const std::vector<int16_t>& styles)`
- `Pad& SetDefaultFillAlpha(float_t alpha)`
- `Pad& SetDefaultFillColors(const std::vector<int16_t>& colors)`
- `Pad& SetDefaultFillColors(const std::vector<std::tuple<float_t, float_t, float_t, float_t>>& rgbEndpoints, std::optional<float_t> alpha = {}, std::optional<int32_t> nColors = {})`
- `Pad& SetDefaultFillStyles(const std::vector<int16_t>& styles)`
- `Pad& SetDefaultCandleBoxRange(float_t candleOption)`
- `Pad& SetDefaultCandleWhiskerRange(float_t candleOption)`
- `Pad& SetFill(int16_t color, std::optional<int16_t> style = {}, std::optional<float_t> alpha = {})`
- `Pad& SetFillColor(int16_t color)`
- `Pad& SetFillStyle(int16_t style)`
- `Pad& SetFillAlpha(float_t alpha)`
- `Pad& SetTransparent()`
- `Pad& SetFrameFill(int16_t color, std::optional<int16_t> style = {}, std::optional<float_t> alpha = {})`
- `Pad& SetFrameFillColor(int16_t color)`
- `Pad& SetFrameFillStyle(int16_t style)`
- `Pad& SetFrameFillAlpha(float_t alpha)`
- `Pad& SetFrameBorder(int16_t color, std::optional<int16_t> style = {}, std::optional<float_t> width = {}, std::optional<float_t> alpha = {})`
- `Pad& SetFrameBorderColor(int16_t color)`
- `Pad& SetFrameBorderAlpha(float_t alpha)`
- `Pad& SetFrameBorderStyle(int16_t style)`
- `Pad& SetFrameBorderWidth(float_t width)`
- `Pad& SetFrameTransparent()`
- `Pad& SetRedrawAxes(bool redraw = true)`

## Plot::Pad::Axis

- `Axis()`
- `Axis& SetTitle(const std::string& title)`
- `Axis& SetRange(double_t min, double_t max)`
- `Axis& SetMaxRange(double_t max)`
- `Axis& SetMinRange(double_t min)`
- `Axis& SetColor(int16_t color)`
- `Axis& SetAxisColor(int16_t color)`
- `Axis& SetAxisAlpha(float_t alpha)`
- `Axis& SetNumDivisions(int16_t numDivisions)`
- `Axis& SetMaxDigits(int32_t maxDigits)`
- `Axis& SetTickLength(float_t tickLength)`
- `Axis& SetTitleFont(int16_t font)`
- `Axis& SetLabelFont(int16_t font)`
- `Axis& SetTitleSize(float_t size)`
- `Axis& SetLabelSize(float_t size)`
- `Axis& SetTitleColor(int16_t color)`
- `Axis& SetLabelColor(int16_t color)`
- `Axis& SetTitleAlpha(float_t alpha)`
- `Axis& SetLabelAlpha(float_t alpha)`
- `Axis& SetTitleOffset(float_t offset)`
- `Axis& SetLabelOffset(float_t offset)`
- `Axis& SetTitleCenter(bool center = true)`
- `Axis& SetLabelCenter(bool center = true)`
- `Axis& SetLog(bool isLog = true)`
- `Axis& SetGrid(bool isGrid = true)`
- `Axis& SetOppositeTicks(bool isOppositeTicks = true)`
- `Axis& SetNoExponent(bool isNoExponent = true)`
- `Axis& SetHideClippedLabels(bool hide = true); // drop a label whose text would reach beyond the pad (e.g. at the edge shared with a touching pad)` — drop a label whose text would reach beyond the pad (e.g. at the edge shared with a touching pad); on by default in the base plots, false keeps the labels
- `Axis& SetTimeFormat(const std::string& timeFormat)`
- `Axis& SetTickOrientation(const std::string& tickOrientation)`

## Plot::Pad::Data
*every setter returns the Data, so calls can be chained*

- `Data()`
- `Data(const std::string& name, const std::string& dataSource, const std::optional<std::string>& label = {})`
- `Data operator()(const std::string& name, const std::optional<std::string>& dataSource = {})`
- `Ratio& AsRatio()`
- `Data& SetDataSource(const std::string& dataSource)`
- `Data& SetLayout(const Data& dataLayout)`
- `Data& ApplyLayout(const Data& dataLayout)`
- `Data& SetRangeX(double_t min, double_t max)`
- `Data& SetRangeX()` — no range restriction in x
- `Data& SetMaxRangeX(double_t max)`
- `Data& SetMinRangeX(double_t min)`
- `Data& SetRangeY(double_t min, double_t max)`
- `Data& SetRangeY()` — no range restriction in y
- `Data& SetMaxRangeY(double_t max)`
- `Data& SetMinRangeY(double_t min)`
- `Data& SetScaleMinimum(double_t scaleFactor)`
- `Data& SetScaleMaximum(double_t scaleFactor)`
- `Data& SetShowOverflowBins(bool showOverflowBins = true)`
- `Data& SetLegendLabel(const std::string& legendLabel)`
- `Data& SetLegend(uint8_t legendID)`
- `Data& SetLegendEntry(const LegendEntry& legendEntry)`
- `Data& SetDrawOption(const std::string& drawOption)`
- `Data& SetDrawOption(draw_option_t optionAlias)`
- `Data& SetDrawOption()`
- `Data& SetTextFormat(const std::string& textFormat)`
- `Data& SetShowStats(const std::string& format = "emr", const std::optional<std::string>& title = {})`
- `Data& SetStatsBox(const StatsBox& statsBox)`
- `Data& SetColor(int16_t color)`
- `Data& SetAlpha(float_t alpha)`
- `Data& SetMarker(int16_t color, int16_t style, float_t size, std::optional<float_t> alpha = {})`
- `Data& SetMarkerColor(int16_t color)`
- `Data& SetMarkerAlpha(float_t alpha)`
- `Data& SetMarkerStyle(int16_t style)`
- `Data& SetMarkerSize(float_t size)`
- `Data& SetLine(int16_t color, int16_t style, float_t width, std::optional<float_t> alpha = {})`
- `Data& SetLineColor(int16_t color)`
- `Data& SetLineAlpha(float_t alpha)`
- `Data& SetLineStyle(int16_t style)`
- `Data& SetLineWidth(float_t width)`
- `Data& SetFill(int16_t color, int16_t style, std::optional<float_t> alpha = {})`
- `Data& SetFillColor(int16_t color)`
- `Data& SetFillStyle(int16_t style)`
- `Data& SetFillAlpha(float_t alpha)`
- `Data& SetDefinesFrame(bool dontDraw = false)`
- `Data& SetKeepInputStyle(bool keep = true)` — line, marker and fill stored with the input win over the defaults of the pad
- `Data& SetContours(const std::vector<double>& contours)`
- `Data& SetContours(int32_t nContours)`
- `Data& SetNpx(int32_t nx, std::optional<int32_t> ny = {})`
- `Data& Normalize(bool isDensity = false, std::optional<double_t> min = {}, std::optional<double_t> max = {})`
- `Data& NormalizeToMaximum(std::optional<double_t> min = {}, std::optional<double_t> max = {})`
- `Data& Scale(double_t scaleFactor)`
- `Data& DivideBinWidth(bool divideBinWidth = true)`
- `Data& Density()`
- `Data& RebinX(uint16_t nGroup)`
- `Data& RebinY(uint16_t nGroup)`
- `Data& RebinZ(uint16_t nGroup)`
- `Data& RebinXY(uint16_t nGroupX, uint16_t nGroupY)`
- `Data& RebinXYZ(uint16_t nGroupX, uint16_t nGroupY, uint16_t nGroupZ)`
- `Data& ScaleX(double_t scaleFactor)`
- `Data& ScaleY(double_t scaleFactor)`
- `Data& ScaleZ(double_t scaleFactor)`
- `Data& Smooth(uint16_t nIterSmooth = 1)`
- `Data& Cumulative(bool forward = true)`
- `Data& Project(const std::vector<uint8_t>& dims, const std::vector<std::tuple<uint8_t, double_t, double_t>>& ranges = {}, std::optional<bool> isUserCoord = {})`
- `Data& ProjectX(double_t startY = 0, double_t endY = -1, std::optional<bool> isUserCoord = {})` — for 2d histos
- `Data& ProjectY(double_t startX = 0, double_t endX = -1, std::optional<bool> isUserCoord = {})` — for 2d histos
- `Data& Profile(const std::vector<uint8_t>& dims, const std::vector<std::tuple<uint8_t, double_t, double_t>>& ranges = {}, std::optional<bool> isUserCoord = {})` — for 2d & 3d histos
- `Data& ProfileX(double_t startY = 0, double_t endY = -1, std::optional<bool> isUserCoord = {})` — for 2d histos
- `Data& ProfileY(double_t startX = 0, double_t endX = -1, std::optional<bool> isUserCoord = {})` — for 2d histos
- `Data& Project(const std::vector<data_dim_t>& dataDims, std::optional<std::string> weight = {})`
- `Data& Project1D(data_dim_t x, std::optional<std::string> weight = {})`
- `Data& Project2D(data_dim_t x, data_dim_t y, std::optional<std::string> weight = {})`
- `Data& Scatter(const std::string& x, const std::string& y)`
- `Data& Scatter(const std::string& x, const std::string& y, const std::string& xErr, const std::string& yErr)`
- `Data& Scatter(const std::string& x, const std::string& y, const std::string& xErrLow, const std::string& xErrHigh, const std::string& yErrLow, const std::string& yErrHigh)`
- `Data& Profile(const std::vector<data_dim_t>& dataDims, const std::string& profile, std::optional<std::string> weight = {})`
- `Data& Profile1D(data_dim_t x, const std::string& profile, std::optional<std::string> weight = {})`
- `Data& Profile2D(data_dim_t x, data_dim_t y, const std::string& profile, std::optional<std::string> weight = {})`
- `Data& Define(const std::string& key, const std::string& value)`
- `Data& Filter(const std::string& filter)`
- `Data& Join(const join_tree_t& tree, const std::vector<std::string>& keys = {}, const std::string& alias = "")`
- `Data& Entries(uint32_t nEntries)`
- `Data& Entries(uint32_t entryMin, uint32_t entryMax)`
- `data_dim_t`: `"var"` (100 automatic bins), `{"var", nBins}`, `{"var", nBins, {min, max}}` or `{"var", {edges...}}` (Python: tuples)
- `join_tree_t`: `"tree"` (same data source) or `{"tree", "dataSource"}` (Python: list)

## Plot::Pad::Ratio
*has all setters, modifiers and selections of Data (returning the Ratio) plus the following*

- `Ratio(const Data& numerator, const Data& denominator)` — inputs from numerator and denominator, appearance from numerator
- `Ratio(const std::string& name, const std::string& dataSource, const std::string& denomName, const std::string& denomDataSource, const std::optional<std::string>& label)`
- `Ratio& SetIsCorrelated(bool isCorrelated = true)`
- `Ratio& Numer()` — following modifiers act on the numerator, before the division
- `Ratio& Denom()` — following modifiers act on the denominator, before the division
- `Ratio& Both()` — following modifiers act on numerator and denominator, before the division
- `Ratio& Result()` — following modifiers act on the ratio itself (default)
- `Ratio& Project(const std::vector<uint8_t>& dims, const std::vector<std::tuple<uint8_t, double_t, double_t>>& ranges = {}, std::optional<bool> isUserCoord = {})`
- `Ratio& ProjectX(double_t startY = 0, double_t endY = -1, std::optional<bool> isUserCoord = {})`
- `Ratio& ProjectY(double_t startX = 0, double_t endX = -1, std::optional<bool> isUserCoord = {})`
- `Ratio& Profile(const std::vector<uint8_t>& dims, const std::vector<std::tuple<uint8_t, double_t, double_t>>& ranges = {}, std::optional<bool> isUserCoord = {})`
- `Ratio& ProfileX(double_t startY = 0, double_t endY = -1, std::optional<bool> isUserCoord = {})`
- `Ratio& ProfileY(double_t startX = 0, double_t endX = -1, std::optional<bool> isUserCoord = {})`
- `Ratio& Project(const std::vector<data_dim_t>& dataDims, std::optional<std::string> weight = {})`
- `Ratio& Project1D(data_dim_t x, std::optional<std::string> weight = {})`
- `Ratio& Project2D(data_dim_t x, data_dim_t y, std::optional<std::string> weight = {})`
- `Ratio& Scatter(const std::string& x, const std::string& y)`
- `Ratio& Scatter(const std::string& x, const std::string& y, const std::string& xErr, const std::string& yErr)`
- `Ratio& Scatter(const std::string& x, const std::string& y, const std::string& xErrLow, const std::string& xErrHigh, const std::string& yErrLow, const std::string& yErrHigh)`
- `Ratio& Profile(const std::vector<data_dim_t>& dataDims, const std::string& profile, std::optional<std::string> weight = {})`
- `Ratio& Profile1D(data_dim_t x, const std::string& profile, std::optional<std::string> weight = {})`
- `Ratio& Profile2D(data_dim_t x, data_dim_t y, const std::string& profile, std::optional<std::string> weight = {})`
- `Ratio& Define(const std::string& key, const std::string& value)`
- `Ratio& Filter(const std::string& filter)`
- `Ratio& Join(const join_tree_t& tree, const std::vector<std::string>& keys = {}, const std::string& alias = "")`
- `Ratio& Entries(uint32_t nEntries)`
- `Ratio& Entries(uint32_t entryMin, uint32_t entryMax)`
- `data_dim_t`: `"var"` (100 automatic bins), `{"var", nBins}`, `{"var", nBins, {min, max}}` or `{"var", {edges...}}` (Python: tuples)
- `join_tree_t`: `"tree"` (same data source) or `{"tree", "dataSource"}` (Python: list)

## Plot::Pad::Box<BoxType>
*common to TextBox, LegendBox and StatsBox*

- `BoxType& SetPosition(double_t x, double_t y)`
- `BoxType& SetSize(double_t width, double_t height)`
- `BoxType& SetUserCoordinates(bool isUserCoord = true)`
- `BoxType& SetAutoPlacement(box_placement_t placement = best_corner)`
- `BoxType& SetBorder(int16_t color, int16_t style, float_t width, std::optional<float_t> alpha = {})`
- `BoxType& SetBorderColor(int16_t color)`
- `BoxType& SetBorderAlpha(float_t alpha)`
- `BoxType& SetBorderStyle(int16_t style)`
- `BoxType& SetBorderWidth(float_t width)`
- `BoxType& SetText(int16_t color, int16_t font, float_t size, std::optional<float_t> alpha = {})`
- `BoxType& SetTextColor(int16_t color)`
- `BoxType& SetTextAlpha(float_t alpha)`
- `BoxType& SetTextFont(int16_t font)`
- `BoxType& SetTextSize(float_t size)`
- `BoxType& SetFill(int16_t color, int16_t style, std::optional<float_t> alpha = {})`
- `BoxType& SetFillColor(int16_t color)`
- `BoxType& SetFillStyle(int16_t style)`
- `BoxType& SetFillAlpha(float_t alpha)`
- `BoxType& SetTransparent()`
- `BoxType& SetNoBox()`
- `BoxType& SetMargin(float_t margin)`
- `BoxType& SetLineSpacing(float_t lineSpacing)`

## Plot::Pad::TextBox

- `TextBox(const std::string& text)`
- `TextBox(const std::vector<std::string>& lines)`
- `TextBox(double_t xPos, double_t yPos, const std::string& text)`
- `TextBox(double_t xPos, double_t yPos, const std::vector<std::string>& lines)`
- `TextBox& SetText(const std::string& text)` — lines separated by newlines
- `TextBox& SetText(const std::vector<std::string>& lines)`
- `TextBox& SetTextAlign(int16_t align)`

## Plot::Pad::StatsBox
*placement and appearance of the statistics box of a data item (Data::SetStatsBox); has the setters of Box*

- `StatsBox()`

## Plot::Pad::LegendBox

- `LegendBox(const std::optional<std::string>& title = {})`
- `LegendBox(double_t xPos, double_t yPos, const std::optional<std::string>& title = {})`
- `LegendEntry& AddEntry(const std::string& label = "")` — a row of its own (with an empty label: an empty line)
- `LegendBox& SetTitle(const std::string& title)`
- `LegendBox& SetNumColumns(uint8_t numColumns)`
- `LegendBox& SetDefaultSymbolElements(const std::string& symbolElements)`
- `LegendBox& SetDefaultColor(int16_t color)`
- `LegendBox& SetDefaultAlpha(float_t alpha)`
- `LegendBox& SetDefaultLineColor(int16_t color)`
- `LegendBox& SetDefaultLineAlpha(float_t alpha)`
- `LegendBox& SetDefaultLineStyle(int16_t style)`
- `LegendBox& SetDefaultLineWidth(float_t width)`
- `LegendBox& SetDefaultMarkerColor(int16_t color)`
- `LegendBox& SetDefaultMarkerAlpha(float_t alpha)`
- `LegendBox& SetDefaultMarkerStyle(int16_t style)`
- `LegendBox& SetDefaultMarkerSize(float_t size)`
- `LegendBox& SetDefaultFillColor(int16_t color)`
- `LegendBox& SetDefaultFillAlpha(float_t alpha)`
- `LegendBox& SetDefaultFillStyle(int16_t style)`
- `LegendBox& SetSymbolColScale(float_t scale)`

## Plot::Pad::LegendEntry
*a legend row: the appearance of the row of a data item (Data::SetLegendEntry) or a row added with LegendBox::AddEntry*

- `LegendEntry(const std::optional<std::string>& label = {}, const std::optional<uint16_t>& refDataID = {}, const std::optional<std::string>& symbolElements = {})`
- `LegendEntry& SetLabel(const std::string& label)`
- `LegendEntry& SetRefData(uint16_t refDataID)`
- `LegendEntry& SetSymbolElements(const std::string& symbolElements)`
- `LegendEntry& AtTop()`
- `LegendEntry& BeforeData(uint16_t dataID)`
- `LegendEntry& AfterData(uint16_t dataID)`
- `LegendEntry& SetColor(int16_t color)`
- `LegendEntry& SetAlpha(float_t alpha)`
- `LegendEntry& SetMarker(int16_t color, int16_t style, float_t size, std::optional<float_t> alpha = {})`
- `LegendEntry& SetMarkerColor(int16_t color)`
- `LegendEntry& SetMarkerAlpha(float_t alpha)`
- `LegendEntry& SetMarkerStyle(int16_t style)`
- `LegendEntry& SetMarkerSize(float_t size)`
- `LegendEntry& SetLine(int16_t color, int16_t style, float_t width, std::optional<float_t> alpha = {})`
- `LegendEntry& SetLineColor(int16_t color)`
- `LegendEntry& SetLineAlpha(float_t alpha)`
- `LegendEntry& SetLineStyle(int16_t style)`
- `LegendEntry& SetLineWidth(float_t width)`
- `LegendEntry& SetFill(int16_t color, int16_t style, std::optional<float_t> alpha = {})`
- `LegendEntry& SetFillColor(int16_t color)`
- `LegendEntry& SetFillAlpha(float_t alpha)`
- `LegendEntry& SetFillStyle(int16_t style)`
- `LegendEntry& SetTextColor(int16_t color)`
- `LegendEntry& SetTextAlpha(float_t alpha)`
- `LegendEntry& SetTextFont(int16_t font)`
- `LegendEntry& SetTextSize(float_t size)`

## Panel
*a cell of a PanelLayout, in units of the standard panel; `Gap()` separates independent panels, `Empty()` leaves a cell without axes*

- `Panel(double_t width = 1., double_t height = 1.)`
- `Panel& ZAxis()` — room for the colour scale to the right of this panel

## PanelLayout
*arrangement of panels and the sizes shared by all base plots*

- `PanelLayout(std::vector<std::vector<Panel>> rows = {{Panel()}})`
- `PanelLayout(const PanelLayout& sizes, std::vector<std::vector<Panel>> rows)` — same lengths, other panels
- `PanelLayout& SetPanelSize(double_t pixel)` — 638: axis frame of Panel(1, 1)
- `PanelLayout& SetMargins(double_t top, double_t bottom, double_t left, double_t right)` — 32, 118, 118, 32: space around the panels (bottom and left hold the labels and titles)
- `PanelLayout& SetZAxisMargin(double_t pixel)` — 268: right margin of a panel with colour scale
- `PanelLayout& SetPanelSpacing(double_t pixel)` — 0: space between touching panels (their axes stay shared)
- `PanelLayout& SetTextSize(double_t pixel)` — 31.52: axis labels, legends and texts
- `PanelLayout& SetTitleSize(double_t pixel)` — 39.4: axis titles
- `PanelLayout& SetTickLength(double_t pixel)` — 19.15
- `PanelLayout& SetLabelOffset(double_t pixel)` — 3.94: distance of the labels from the axis
- `PanelLayout& SetXTitleOffset(double_t pixel)` — 63.04: distance of the x title from the axis
- `PanelLayout& SetYTitleOffset(double_t pixel)` — 0: automatic, next to the widest label (otherwise the distance from the axis)
- `PanelLayout& SetZTitleOffset(double_t pixel)` — 122.9: distance of the z title from the axis
- `PanelLayout& SetLineWidth(float_t width)` — 5 (ROOT line width in pixel)
- `PanelLayout& SetMarkerSize(float_t size)` — 1.4 (ROOT marker size, 1 = 8 pixel)

## Enumerations

- `draw_option_t`: `points`, `points_xerr`, `points_endcaps`, `points_xerr_endcaps`, `points_line`, `points_text`, `points_arrows`, `line`, `curve`, `curve_clipped`, `hist`, `hist_open`, `hist_clipped`, `hist_open_clipped`, `bars`, `hbars`, `area`, `area_smooth`, `band`, `band_smooth`, `boxes`, `boxes_nomarkers`, `brackets`, `text`, `col`, `colz`, `box`, `lego`, `lego_col`, `lego_colz`, `lego_noborders`, `surf`, `surf_col`, `surf_colz`, `surf_fill`, `surf_fillz`, `surf_contours`, `surf_shaded`, `cont`, `cont_col`, `cont_colz`, `cont_fill`, `cont_fillz`, `cont_smooth`, `cont_smoothz`, `candle`, `candle_minmax`, `candle_mean`, `candle_notched`, `candle_points`, `candle_scatter`, `candle_meanline`, `violin`, `violin_minmax`
- `box_placement_t`: `best_corner`, `top_left`, `top_right`, `bottom_right`, `bottom_left`
