- Notifications
You must be signed in to change notification settings - Fork198
an extensive Qt5 & Qt6 Plotter framework (including a feature-richt plotter widget, a speed-optimized, but limited variant and a LaTeX equation renderer!), written fully in C/C++ and without external dependencies
License
jkriege2/JKQtPlotter
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
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 theQt framework.
This software is licensed under the term of theGNU Lesser General Public License 2.1(LGPL 2.1) or above.
- 2D Plotter widget classJKQTPlotter:
- high-quality plotting
- no other dependencies than Qt >= 5.0 (CImg andOpenCV 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 datastoreJKQTPDatastore:
- 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 ofgraphs that can be added to a plot, e.g.:
- scatter plot andparametrized scatter plots (e.g. bubble charts)
- line graphs,step graphs,impulses
- filled curves
- barcharts (also stacked)
- extensive support for differentstyles of error indicators
- integrated mathematical function parser forparsed function plots (with intelligent rendering algorithm)
- line/scatter graphs can also bebased on C/C++ functions instead of data series (C++11 support!)
- statistical plots) (e.g. boxplots, violinplots, ...)
- large variety ofimage plots (inclusing different color-scale modes, RGBA-plots, overlays/masks)
- contour plots
- vector field graphs/quiver plots
- financial graphs (candlestick/OHLC)
- geometric forms (lines, rectangles, polygons, circles, bezier-curves, ...) /annotations (labels, text, ranges, ...)
- can be easily extended by deriving a new graph fromJKQTPPlotElement,JKQTPPlotAnnotationElement,JKQTPGeometricPlotElement,JKQTPGraph
- optional:OpenCV interface,CImg interfaces
- CMake-based build system
- extensive set ofExamples/Tutorials
- extensive doxygen-generatedDocumentation
A Documentation (auto-)generated withdoxygen from the trunk source code can be found here:http://jkriege2.github.io/JKQTPlotter/index.html
There are also some subpage of general intetest:
There is alarge set of usage examples (with explanations for each) and tutorials in the folder./examples/
.All test-projects are Qt-projects that use tcmake to build. Some of them are also available with additional qmake build-files.
In addition: TheScreenshots-folder contains several screenshots, partly taken from the provided examples, but also from other software using this libarary (e.g.QuickFit 3.0)
JKQTPlotter contains two different build systems: A modernCMake-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 inhttp://jkriege2.github.io/JKQtPlotter/page_buildinstructions.html.
WithCMake 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})
Seehttps://jkriege2.github.io/JKQtPlotter/page_buildinstructions__c_m_a_k_e.html for details.
In addition to the method described above (i.e. build and install the library and then use it), you can also use JKQTPlotter via CMake'sFetchContent-API.
For this method, you need to add these lines to your CMake project:
include(FetchContent) # once in the project to include the module# ... now declare JKQTPlotter5/6FetchContent_Declare(JKQTPlotter${QT_VERSION_MAJOR} GIT_REPOSITORY https://github.com/jkriege2/JKQtPlotter.git # GIT_TAG v5.0.0)# ... finally make JKQTPlotter5/6 availableFetchContent_MakeAvailable(JKQTPlotter${QT_VERSION_MAJOR})
These declare JKQTPlotter and make it available in your project. Afterwards you should be able to link against it, using
target_link_libraries(${PROJECT_NAME} JKQTPlotter${QT_VERSION_MAJOR}::JKQTPlotter${QT_VERSION_MAJOR})
About
an extensive Qt5 & Qt6 Plotter framework (including a feature-richt plotter widget, a speed-optimized, but limited variant and a LaTeX equation renderer!), written fully in C/C++ and without external dependencies