/*! \defgroup jkqtptools Tool Functions and Definitions for JKQTPlotter This group contains a set of tools that I've written over the years to enhance the C++ standard library. \defgroup jkqtpplotterclasses_tools Support Classes/Structs/Functions for JKQTPlotter&JKQTBasePlotter \ingroup jkqtptools \defgroup tools_math Tools for Mathematical Computations & Equation Parsing \ingroup jkqtptools \defgroup jkqtptools_string String Tool Functions \ingroup jkqtptools \defgroup jkqtptools_qt Additional Tools for Qt \ingroup jkqtptools \defgroup jkqtptools_qtwidgets Additional Widgets for Qt \ingroup jkqtptools \defgroup jkqtptools_drawing Drawing Tools \ingroup jkqtptools \defgroup jkqtptools_debugging Debugging Tools \ingroup jkqtptools \defgroup jkqtplotter JKQTPlotter: Qt based Scientific Plotter Class A Qt based plotter for 2D scientific graphs. Main Plotting widget is JKQTPlotter. \defgroup jkqtpdatastorage Data Storage Classes/System \ingroup jkqtplotter The classes in this group implement a data storage system for use with the main plotter class. Basically a table of data is generated as a set of logical columns that may be bound to different data sources (internal or external memory arrays. Later on it is simply possible to plot graphs using the column number and the not a link to the actual data array, as the link is stored in these classes. \defgroup jkqtpopencvinterface OpenCV Interfaceing Tools \ingroup jkqtpdatastorage Classes and functions in this group allow JKQTPlotter to directly work with OpenCV data structures. Examples: - \ref JKQTPlotterImagePlotOpenCV - \ref JKQTPlotterImagePlotRGBOpenCV . \defgroup jkqtpplotterclasses Plotter Class & Plotter Widget \ingroup jkqtplotter This group contains the actual plotter classes, that implement layout management code, coordinate system management an actual plotter widget ... There are two main classes: - JKQTBasePlotter is a QObject-derived class that implements all the plotting logic and drawing code. It does not implement a Qt widget though. - JKQTPlotter is a QWidget-based class that contains a JKQTBasePlotter and uses it to draw plots onto a Qt form. . \defgroup jkqtplotter_elements Plot Elements \ingroup jkqtplotter This group assembles all classes that represent different elements of a plot (managed by JKQTBasePlotter/JKQTPlotter). There are these major subgroups: - \ref jkqtpbaseplotter_elements contains all non-graph objects, i.e. things like coordinate axes and so on - \ref jkqtplotter_graphsgroup contains the actual graph classes - \ref jkqtplotter_overlays contains classes for overlay elements (lines, marker ...) that can be drawn quickly on top of a plot . \defgroup jkqtpbaseplotter_elements Basic (non-graph) Plot Elements (coordinate axes, ...) \ingroup jkqtplotter_elements This group contains some tool classes that implement basic elements of the plot (coordinate axes, key, ...). These classes are used by JKQTPlotterBase to output the plot. \defgroup jkqtplotter_graphsgroup Graph Classes \ingroup jkqtplotter_elements This group contains all classes in the JKQTPlotter library that may be used to draw a graph (i.e. a curve) onto a plot. \tableofcontents \section jkqtplotter_graphsgroup_classstructure Graph Class Structure \subsection jkqtplotter_graphsgroup_classstructure_basics Graph Classes Each type of graph is represented by another class, which has to be derived from JKQTPPlotElement. This class provides a basic virtual interface that allows JKQTPlotter to draw the graphs represented by them. This interface consists of these functions: - JKQTPPlotElement::draw() draws the graph onto a given JKQTPEnhancedPainter (derived from QPainter) - JKQTPPlotElement::drawKeyMarker() draws the small marker image in the plot legend - JKQTPPlotElement::getKeyLabelColor() returns a color for the legend entry for the graph - JKQTPPlotElement::getXMinMax() returns the extent of the graph in x-direction (e.g. for auto-zooming) - JKQTPPlotElement::getYMinMax() returns the extent of the graph in Y-direction (e.g. for auto-zooming) . In addition to these basic functions, there are additional functions that can be used to draw something outside the actual plot rectangle. These are used to e.g. add color-scales to the side of the graph: - JKQTPPlotElement::getOutsideSize() returns the amount of space required outside the plot rectangle - JKQTPPlotElement::drawOutside() draws the elements outside the plot rectangle . Usually if writing a new graph, one would not directly derive from JKQTPPlotElement, but from a cass in it's hirarchy of children. These children already provide certain facilities for certain types of graphs. \dotfile jkqtplotter_graphhirarchy.dot \subsection jkqtplotter_graphsgroup_classstructure_mixins Mix-In Classes for Graphs In addition there are mix-in classes that are used via multiple inheritance that add additional features and properties to a graph. A prominent example are the classes for \ref jkqtplotter_basegraphserrors "error indicators". With these there are usually two variants of one type of graph: One without error indicators and one with error indicators, e.g.: - JKQTPXYLineGraph shows lines+symbols graphs made up from x/y-value pairs for each data point. - JKQTPXYLineErrorGraph extends JKQTPXYLineGraph with error indicator drawing/properties provided by JKQTPXYGraphErrors . This approach allows to keep interfaces and appearance recognizeable over different graph classes and locates the source code for a feature like error indicators in a single/in few class(es). Another example of such a class is JKQTPColorPaletteTools, which provides functions that allow to use color palettes. It is mainly used for the \ref jkqtplotter_imagelots "Image/Matrix graphs", but also by e.g. JKQTPXYParametrizedScatterGraph. \defgroup jkqtplotter_basegraphs Baseclasses for Graphs \ingroup jkqtplotter_graphsgroup \defgroup jkqtplotter_basegraphserrors Mix-In Classes for Error Indicators \ingroup jkqtplotter_basegraphs \defgroup jkqtplotter_basegraphs_stylemixins Mix-In Classes for Plot Styling \ingroup jkqtplotter_basegraphs \defgroup jkqtplotter_linesymbolgraphs Line/Symbol Graphs \ingroup jkqtplotter_graphsgroup This group assembles graphs that show their data with symbols and optionally with connecting lines in diferent styles:
Screenshot Classes
\image html beeswarmplot_small.png JKQTPSingleColumnSymbolsGraph
\image html jkqtplotter_simpletest_symbols_and_styles_small.png JKQTPXYLineGraph, JKQTPXYLineErrorGraph
\image html jkqtplotter_simpletest_paramscatterplot_small.png JKQTPXYParametrizedScatterGraph, JKQTPXYParametrizedErrorScatterGraph
\image html jkqtplotter_simpletest_stepplots_small.png JKQTPSpecialLineHorizontalGraph, JKQTPSpecialLineVerticalGraph
\defgroup jkqtplotter_linesymbolgraphs_simple Basic Line/Scatter Graphs \ingroup jkqtplotter_linesymbolgraphs
Screenshot Classes
\image html beeswarmplot_small.png JKQTPSingleColumnSymbolsGraph
\image html jkqtplotter_simpletest_symbols_and_styles_small.png JKQTPXYLineGraph, JKQTPXYLineErrorGraph
\image html jkqtplotter_simpletest_stepplots_small.png JKQTPSpecialLineHorizontalGraph, JKQTPSpecialLineVerticalGraph
\defgroup jkqtplotter_linesymbolgraphs_param Parametrized Line/Scatter Graphs \ingroup jkqtplotter_linesymbolgraphs
Screenshot Classes
\image html jkqtplotter_simpletest_paramscatterplot_small.png JKQTPXYParametrizedScatterGraph, JKQTPXYParametrizedErrorScatterGraph
\defgroup jkqtplotter_filledgraphs Filled Polygon/Area Graphs \ingroup jkqtplotter_graphsgroup
Screenshot Classes
\image html jkqtplotter_simpletest_filledgraphs_small.png JKQTPFilledCurveXGraph, JKQTPFilledCurveYGraph
\image html plot_filledcurvexerrorplots_small.png JKQTPFilledCurveXErrorGraph, JKQTPFilledCurveYErrorGraph
\image html JKQTPfilledVerticalRangeGraph_WithLines_small.png JKQTPFilledVerticalRangeGraph
\defgroup jkqtplotter_functiongraphs Function Graphs \ingroup jkqtplotter_linesymbolgraphs
Screenshot Classes
\image html jkqtplotter_simpletest_functionplot_small.png JKQTPXParsedFunctionLineGraph, JKQTPYParsedFunctionLineGraph
\defgroup jkqtplotter_parsedFgraphs Parsed Function Graphs \ingroup jkqtplotter_linesymbolgraphs
Screenshot Classes
\image html jkqtplotter_simpletest_functionplot_small.png JKQTPXFunctionLineGraph, JKQTPYFunctionLineGraph
\defgroup jkqtplotter_barssticks Barcharts, Impulse-Charts, ... \ingroup jkqtplotter_graphsgroup
Screenshot Classes
\image html jkqtplotter_simpletest_barchart_small.png JKQTPBarVerticalGraph, JKQTPBarHorizontalGraph
\image html barchart_error_small.png JKQTPBarVerticalErrorGraph, JKQTPBarHorizontalErrorGraph
\image html JKQTPbarVerticalGraphStacked_small.png JKQTPBarVerticalStackableGraph, JKQTPBarHorizontalStackableGraph
\image html jkqtplotter_simpletest_impulsesplot_small.png JKQTPImpulsesHorizontalGraph, JKQTPImpulsesVerticalGraph
\image html impulses_errors_small.png JKQTPImpulsesHorizontalErrorGraph, JKQTPImpulsesVerticalErrorGraph
\defgroup jkqtplotter_statgraphs Statistical Graphs (e.g. Boxplots ...) \ingroup jkqtplotter_graphsgroup
Screenshot Classes
\image html jkqtplotter_simpletest_boxplot_small.png JKQTPBoxplotVerticalGraph, JKQTPBoxplotHorizontalGraph
\defgroup jkqtplotter_geoplots Geometric Elements (Lines, Rectangles, ...) \ingroup jkqtplotter_graphsgroup
Screenshot Classes
\image html symbol_symbol_filled_diamond.png JKQTPGeoSymbol
\image html geo_text_small.png JKQTPGeoText
\image html geo_line_small.png JKQTPGeoLine, JKQTPGeoInfiniteLine, JKQTPGeoPolyLines
\image html geo_rect_small.png JKQTPGeoRectangle
\image html geo_polygon_small.png JKQTPGeoPolygon
\image html geo_ellipse_small.png JKQTPGeoEllipse
\image html geo_arc_small.png JKQTPGeoArc
\image html geo_pie_small.png JKQTPGeoPie
\image html geo_chords_small.png JKQTPGeoChord
\image html geo_boxplot_small.png JKQTPBoxplotVerticalElement, JKQTPBoxplotHorizontalElement
Examples: - \ref JKQTPlotterGeometricGraphs . \defgroup jkqtplotter_diverse Diverse Other Graphs (Ranges, ...) \ingroup jkqtplotter_graphsgroup
Screenshot Classes
\image html JKQTPHorizontalRange_small.png JKQTPHorizontalRange, JKQTPVerticalRange
\image html JKQTPPeakStreamGraphY_small.png JKQTPPeakStreamGraph
\defgroup jkqtplotter_imagelots Matrix/Image Plotting \ingroup jkqtplotter_graphsgroup
Screenshot Classes
\image html jkqtplotter_simpletest_rgbimageplot_qt_small.png JKQTPImage
\image html JKQTPMathImageBaseModifyNone_small.png JKQTPMathImage, JKQTPColumnMathImage
\image html rgbimageplots_small.png JKQTPRGBMathImage, JKQTPColumnRGBMathImage
\image html overlayimage_small.png JKQTPOverlayImage
\image html overlayimageenhanced_small.png JKQTPOverlayImageEnhanced, JKQTPColumnOverlayImageEnhanced
\image html JKQTPContour_small.png JKQTPContour
\defgroup jkqtplotter_imagelots_elements Matrix/Image Graphs \ingroup jkqtplotter_imagelots
Screenshot Classes
\image html jkqtplotter_simpletest_rgbimageplot_qt_small.png JKQTPImage
\image html JKQTPMathImageBaseModifyNone_small.png JKQTPMathImage, JKQTPColumnMathImage
\image html jkqtplotter_simpletest_rgbimageplot_opencv_small.png JKQTPRGBMathImage, JKQTPColumnRGBMathImage
\defgroup jkqtplotter_imagelots_overlays Image/Matrix Overlay Graphs \ingroup jkqtplotter_imagelots
Screenshot Classes
\image html overlayimage_small.png JKQTPOverlayImage
\image html overlayimageenhanced_small.png JKQTPOverlayImageEnhanced, JKQTPColumnOverlayImageEnhanced
\defgroup jkqtplotter_imagelots_tools Tool Functions & Classes for Image Drawing \ingroup jkqtplotter_imagelots \defgroup jkqtplotter_imagelots_contour Contour Graphs \ingroup jkqtplotter_imagelots
Screenshot Classes
\image html JKQTPContour_small.png JKQTPContour
\defgroup jkqtplotter_overlays Overlay Elements \ingroup jkqtplotter_elements
Screenshot Classes
JKQTPOverlayVerticalLine, JKQTPOverlayLine
JKQTPOverlayVerticalRange
JKQTPOverlayRectangle
\defgroup jkqtpplotter_styling JKQTPlotter Styling System \ingroup jkqtplotter \image html stylesbanner.png JKQTPlotter (and JKQTBasePlotter) offer a styling system, which allows to easily define and transfer plot styling from one object to another. The system is based on a hirarchy of structs, which summarize properties, describing how a plot looks in general. The classes contained in this system are: - JKQTPlotterStyle for JKQTPlotter: Defines e.g. basic user-interactions, the display options of the toolbar - JKQTBasePlotterStyle for JKQTBasePlotter defines the appearance of the plot itself (colors, axis properties, key properties, default graph colors/styles, ...), contains JKQTPCoordinateAxisStyle instances to configrue the plot's coordinate axes - JKQTPCoordinateAxisStyle for JKQTPCoordinateAxis defines the appearance of a coordinate axis (colors, axis properties, ...) - JKQTPKeyStyle for the style of the key/legend in a JKQTBasePlotterStyle . In addition there are static methods that allow to manage a system-wide (actually program-instance wide) style that is applied to any new instance of JKQTPlotter and JKQTBasePlotter on construction: - JKQTPGetSystemDefaultStyle() / JKQTPSetSystemDefaultStyle() allows to access the central instace of JKQTPlotterStyle (mainly properties/style of the GUI-parts and user-action bindings) - JKQTPGetSystemDefaultBaseStyle() / JKQTPSetSystemDefaultBaseStyle() accesses the central instance of JKQTBasePlotterStyle (styles the actual plot/graphs with colors, axes styles, ...) . You can e.g. use these general methods to alter the styles for all JKQTPlotter instances, created in the future: \code{.cpp} // load the system-wide default settings from an INI-file: QSettings plotSettings("JKQTPlotterSettings.ini", QSettings::IniFormat);; JKQTPGetSystemDefaultStyle().loadSettings(plotSettings); JKQTPGetSystemDefaultBaseStyle().loadSettings(plotSettings); // alter a system-wide default setting by hand (here: set color of zooming rect to red) JKQTPGetSystemDefaultStyle().userActionColor=QColor("red"); \endcode Several pre-made styles are available in the JKQTPlotter repository (https://github.com/jkriege2/JKQtPlotter/tree/master/lib/jkqtplotterressources/styles/). These are also linked into the JKQTPlotter library as Qt ressource into the subdirectory \c :/JKQTPlotter/styles/ . You can use them as follows: \code{.cpp} QSettings plotSettings(":/JKQTPlotter/styles/blackandwhite.ini", QSettings::IniFormat);; JKQTPGetSystemDefaultStyle().loadSettings(plotSettings); JKQTPGetSystemDefaultBaseStyle().loadSettings(plotSettings); \endcode Here is a table with all available ready-made styles:
Style-file Screenshot
The Default Style \image html style_default.png
\c :/JKQTPlotter/styles/simple_gridandticks.ini \image html style_simple_axesoffset_plotbox.png
\c :/JKQTPlotter/styles/simple_axesoffset.ini \image html style_simple_axesoffset.png
\c :/JKQTPlotter/styles/simple_axesoffset_plotbox.ini \image html style_simple_axesoffset_plotbox.png
\c :/JKQTPlotter/styles/dark.ini \image html style_dark.png
\c :/JKQTPlotter/styles/blueprint.ini \image html style_blueprint.png
\c :/JKQTPlotter/styles/blackandwhite.ini \image html style_blackandwhite.png
\see For a detailed example, see \ref JKQTPlotterStyling \defgroup jkqtpqtwidgetsttools Qt Widgets/Tools to work with JKQTPlotter \ingroup jkqtplotter This group assembles several Qt widgets and tool classes that are linked to JKQTPlotter/JKQTBasePlotter and allow to build advanced GUIs for these (e.g. model/view access to internal data ...) \defgroup jkqtpgraphsmodel Qt Data Models to Access Graphs in a JKQTBasePlotter/JKQTPlotter \ingroup jkqtpqtwidgetsttools Data models in this group allow to access different internal data from a JKQTBasePlotter/JKQTPlotter and in part to manipulate these. \defgroup jkqtpcomboboxes Comboboxes for Properties of JKQTBasePlotter/JKQTPlotter \ingroup jkqtpqtwidgetsttools This group contains several QComboBox-derived classes that can be used to select different enum-values (e.g. with JKQTPMathImageColorPaletteComboBox you can select a color-palette from JKQTPMathImageColorPalette ). */