b0df7a1fd7
NEW/BREAKING: refactor CMake-Code, so static/dynamic switch is done via <code>BUILD_SHARED_LIBS</code>, which retires <code>JKQtPlotter_BUILD_STATIC_LIBS</code>, <code>JKQtPlotter_BUILD_SHARED_LIBS</code> and removes the capability to build static and shared libraries in one location (fixes issue #104) NEW: prepareed library for CMake's <a href="https://cmake.org/cmake/help/latest/module/FetchContent.html">FetchContent</a>-API NEW: the different sub-libraries JKQTPlotter, JKQTFastPlotter (DEPRECATED), JKQTMath, JKQTMathText can be activated/deactivated with CMake options JKQtPlotter_BUILD_LIB_JKQTPLOTTER, JKQtPlotter_BUILD_LIB_JKQTFASTPLOTTER, JKQtPlotter_BUILD_LIB_JKQTMATHTEXT, JKQtPlotter_BUILD_LIB_JKQTMATH |
||
---|---|---|
.github/workflows | ||
cmake | ||
doc | ||
examples | ||
lib | ||
qmake | ||
screenshots | ||
tools | ||
.gitignore | ||
appveyor.yml | ||
CMakeLists.txt | ||
CODE_OF_CONDUCT.md | ||
CONTRIBUTING.md | ||
Doxyfile | ||
JKQtPlotterAppveyorBuild.pro | ||
JKQtPlotterBuildAllExamples.pro | ||
JKQtPlotterBuildLibsOnly.pro | ||
LICENSE | ||
README.md | ||
readme.txt.in | ||
SECURITY.md |
JKQTPlotter - A Qt Plotting Library
This is an extensive C++ library for data visualization, plotting and charting for Qt (>= 5.0, tested with Qt up to 6.3). It is feature-rich but self-contained and only depends on the Qt framework.
This software is licensed under the term of the GNU Lesser General Public License 2.1 (LGPL 2.1) or above.
Main Features
- 2D Plotter widget class JKQTPlotter:
- high-quality plotting
- no other dependencies than Qt >= 5.0 (CImg and OpenCV are optional dependencies)
- highly customizable axes/grids (linear/log, date/time, custom ticks ...)
- JKQTMathText: integrated LaTeX parser (pure C++, no dependencies) to render mathematical equations in axis labels, ticks, ...
- extensive user-interactions pre-programmed (several zooming modes, selecting regions, custom context menus, switch graph visibility, ...)
- full print and export (PDF,PNG,...) support with preview and parametrization out-the-box
- highly customizable look and feel
- supports the Qt layout system for graphs and allows to symchronize several graphs with each other
- centralized data management in an internal datastore JKQTPDatastore:
- data organized by columns, can also represent image data (ropw-major)
- allows to reuse a column in several graphs
- access via Qt's model view framework
- external or internal datasets
- complete with GUI (table view)
- export capabilities (e.g. to CSV, SYLK, ...)
- C++ standard iterator interface
- statistics library (basic statistics, boxplots, histograms, kernel density estimates, regression analysis, polynomial fitting)
- large variety of graphs that can be added to a plot, e.g.:
- scatter-plots (also parametrized color/size/symbol by a third data-column)
- line graphs, step graphs, impulses
- filled curves
- barcharts (also stacked)
- extensive support for different styles of error indicators
- integrated mathematical function parser for parsed function plots (with intelligent rendering algorithm)
- line/scatter graphs can also be based on C/C++ functions instead of data series (C++11 support!)
- statistical plots) (e.g. boxplots, violinplots, ...)
- large variety of image plots (inclusing different color-scale modes, RGBA-plots, overlays/masks)
- contour plots
- geometric forms / annotations
- can be easily extended by deriving a new graph from JKQTPPlotElement, JKQTPPlotAnnotationElement, JKQTPGeometricPlotElement, JKQTPGraph
- optional: OpenCV interface, CImg interfaces
- CMake-based build system
- extensive set of Examples/Tutorials
- extensive doxygen-generated Documentation
Documentation
A Documentation (auto-)generated with doxygen from the trunk source code can be found here: http://jkriege2.github.io/JKQTPlotter/index.html
There are also some subpage of general intetest:
Examples
There is a large set of usage examples (with explanations for each) and tutorials in the folder ./examples/
.
All test-projects are Qt-projects that use qmake to build. You can load them into QtCreator easily.
Screenshots
The Screenshots-page contains several screenshots, partly taken from the provided examples, but also from other software using this libarary (e.g. QuickFit 3.0)
Building
JKQTPlotter contains two different build systems: A modern CMake-based build and an older (and deprecated!) QMake-based build (which works out of the box with Qt 5.x and QT 6.x). Both systems are explained in detail in http://jkriege2.github.io/JKQtPlotter/page_buildinstructions.html.
With CMake you can easily build JKQTPlotter and all its examples, by calling something like:
$ mkdir build; cd build
$ cmake .. -G "<cmake_generator>" "-DCMAKE_PREFIX_PATH=<path_to_your_qt_sources>" "-DCMAKE_INSTALL_PREFIX=<where_to_install>"
$ cmake --build . --config "Debug"
$ cmake --install . --config "Debug"
This will create CMake targets, which you can easily link against. For the main plotter library, the target's name is \c JKQTPlotter5::JKQTPlotter5 or \c JKQTPlotter6::JKQTPlotter6 depending on the Qt-Version you use. You can then simmply link against this via:
find_package(JKQTPlotter6 REQUIRED)
target_link_libraries(${PROJECT_NAME} JKQTPlotter6::JKQTPlotter6)
or on a Qt-version agnostic way via:
find_package(JKQTPlotter${QT_VERSION_MAJOR} REQUIRED)
target_link_libraries(${PROJECT_NAME} JKQTPlotter${QT_VERSION_MAJOR}::JKQTPlotter${QT_VERSION_MAJOR})
See http://jkriege2.github.io/JKQtPlotter/page_buildinstructions_cmake.html for details.