{"id":15209643,"url":"https://github.com/jkriege2/jkqtplotter","last_synced_at":"2025-05-14T19:10:14.699Z","repository":{"id":34894591,"uuid":"38922826","full_name":"jkriege2/JKQtPlotter","owner":"jkriege2","description":"an extensive Qt5 \u0026 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","archived":false,"fork":false,"pushed_at":"2025-01-15T21:38:59.000Z","size":1334951,"stargazers_count":966,"open_issues_count":12,"forks_count":200,"subscribers_count":44,"default_branch":"master","last_synced_at":"2025-05-14T19:10:07.406Z","etag":null,"topics":["barchart","charting","charting-library","cpp11","graphics-programming","graphing","latex-parser","plot","plotting","plotting-library","qt","qt-libraries","qt-widgets","qt5","qt5-widgets","qt6","qt6-widgets","scientific-visualization","statistical-methods","visualization"],"latest_commit_sha":null,"homepage":"http://jkriege2.github.io/JKQtPlotter/index.html","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-2.1","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jkriege2.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-07-11T10:55:50.000Z","updated_at":"2025-05-14T14:18:41.000Z","dependencies_parsed_at":"2025-01-24T04:35:27.409Z","dependency_job_id":null,"html_url":"https://github.com/jkriege2/JKQtPlotter","commit_stats":{"total_commits":1139,"total_committers":18,"mean_commits":63.27777777777778,"dds":0.05970149253731338,"last_synced_commit":"b65da26c0fb106ec5815c64502e1f6d64e2344be"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jkriege2%2FJKQtPlotter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jkriege2%2FJKQtPlotter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jkriege2%2FJKQtPlotter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jkriege2%2FJKQtPlotter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jkriege2","download_url":"https://codeload.github.com/jkriege2/JKQtPlotter/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254209859,"owners_count":22032897,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["barchart","charting","charting-library","cpp11","graphics-programming","graphing","latex-parser","plot","plotting","plotting-library","qt","qt-libraries","qt-widgets","qt5","qt5-widgets","qt6","qt6-widgets","scientific-visualization","statistical-methods","visualization"],"created_at":"2024-09-28T07:42:05.113Z","updated_at":"2025-05-14T19:10:08.435Z","avatar_url":"https://github.com/jkriege2.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# JKQTPlotter - A Qt Plotting Library\r\nThis is an extensive C++ library for data visualization, plotting and charting for Qt (\u003e= 5.0, tested with Qt up to 6.3). It is feature-rich but self-contained and only depends on the [Qt framework](https://qt.io).\r\n\r\nThis software is licensed under the term of the [GNU Lesser General Public License 2.1 \r\n(LGPL 2.1)](./LICENSE) or above. \r\n\r\n[![Lates Release](https://img.shields.io/github/v/release/jkriege2/JKQtPlotter)](https://github.com/jkriege2/JKQtPlotter/releases)\r\n\r\n![Language](https://img.shields.io/github/languages/top/jkriege2/JKQtPlotter)\r\n[![Qt5](https://img.shields.io/badge/Qt-5-brightgreen)](https://doc.qt.io/qt-5/)\r\n[![Qt6](https://img.shields.io/badge/Qt-6-brightgreen)](https://doc.qt.io/qt-6/)\r\n\r\n[![Documentation](https://img.shields.io/badge/documentation-online-blue)](http://jkriege2.github.io/JKQtPlotter/index.html)\r\n\r\n[![Build status](https://ci.appveyor.com/api/projects/status/vq2o9pfi97isxm2a?svg=true)](https://ci.appveyor.com/project/jkriege2/jkqtplotter)\r\n\r\n[![Commit Activity](https://img.shields.io/github/commit-activity/m/jkriege2/JKQtPlotter)](https://github.com/jkriege2/JKQtPlotter/pulse)\r\n[![Last Commit](https://img.shields.io/github/last-commit/jkriege2/JKQtPlotter)](https://github.com/jkriege2/JKQtPlotter/pulse)\r\n[![Contributors](https://img.shields.io/github/contributors/jkriege2/JKQtPlotter)](https://github.com/jkriege2/JKQtPlotter/graphs/contributors)\r\n\r\n[![Open Issues](https://img.shields.io/github/issues/jkriege2/JKQtPlotter)](https://github.com/jkriege2/JKQtPlotter/issues)\r\n[![Closed Issues](https://img.shields.io/github/issues-closed/jkriege2/JKQtPlotter)](https://github.com/jkriege2/JKQtPlotter/issues?q=is%3Aissue+is%3Aclosed)\r\n\r\n[![Open PRs](https://img.shields.io/github/issues-pr/jkriege2/JKQtPlotter)](https://github.com/jkriege2/JKQtPlotter/pulls)\r\n[![Closed PRs](https://img.shields.io/github/issues-pr-closed/jkriege2/JKQtPlotter)](https://github.com/jkriege2/JKQtPlotter/pulls?q=is%3Apr+is%3Aclosed)\r\n\r\n[![CodeQL](https://github.com/jkriege2/JKQtPlotter/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/jkriege2/JKQtPlotter/actions/workflows/codeql-analysis.yml)\r\n[![MSVC-CodeAnalysis](https://github.com/jkriege2/JKQtPlotter/actions/workflows/msvc-codeanalysis.yml/badge.svg)](https://github.com/jkriege2/JKQtPlotter/actions/workflows/msvc-codeanalysis.yml)\r\n\r\n[![EXAMPLES-Page](./doc/images/socialmediabanner.png)](http://jkriege2.github.io/JKQtPlotter/index.html)\r\n\r\n## Main Features\r\n- 2D Plotter widget class [JKQTPlotter](http://jkriege2.github.io/JKQtPlotter/group__jkqtplotter.html):\r\n  - high-quality plotting\r\n  - no other dependencies than Qt \u003e= 5.0 ([CImg](https://cimg.eu/) and [OpenCV](https://opencv.org/) are optional dependencies)\r\n  - highly customizable axes/grids (linear/log, date/time, custom ticks ...)\r\n  - [JKQTMathText:](http://jkriege2.github.io/JKQtPlotter/group__jkqtmathtext.html) integrated LaTeX parser (pure C++, no dependencies) to render mathematical equations in axis labels, ticks, ...\r\n  - extensive user-interactions pre-programmed (several zooming modes, selecting regions, custom context menus, switch graph visibility, ...)\r\n  - full print and export (PDF,PNG,...) support with preview and parametrization out-the-box\r\n  - [highly customizable look and feel](http://jkriege2.github.io/JKQtPlotter/group__jkqtpplotter__styling.html)\r\n  - supports the Qt layout system for graphs and allows to symchronize several graphs with each other\r\n- [centralized data management](http://jkriege2.github.io/JKQtPlotter/group__jkqtpdatastorage.html) in an internal datastore [JKQTPDatastore](http://jkriege2.github.io/JKQtPlotter/class_j_k_q_t_p_datastore.html):\r\n  - data organized by columns, can also represent image data (ropw-major)\r\n  - allows to reuse a column in several graphs\r\n  - access via Qt's model view framework\r\n  - external or internal datasets\r\n  - complete with GUI (table view)\r\n  - export capabilities (e.g. to CSV, SYLK, ...)\r\n  - C++ standard iterator interface\r\n  - [statistics library](https://jkriege2.github.io/JKQtPlotter/group__jkqtptools__math__statistics.html) (basic statistics, boxplots, histograms, kernel density estimates, regression analysis, polynomial fitting)\r\n- large variety of [graphs](https://jkriege2.github.io/JKQtPlotter/group__jkqtplotter__concretegraphs.html) that can be added to a plot, e.g.:\r\n  - [scatter plot](https://jkriege2.github.io/JKQtPlotter/group__jkqtplotter__linesymbolgraphs__scatter.html) and [parametrized scatter plots (e.g. bubble charts)](http://jkriege2.github.io/JKQtPlotter/group__jkqtplotter__linesymbolgraphs__param.html) \r\n  - [line graphs](https://jkriege2.github.io/JKQtPlotter/group__jkqtplotter__linesymbolgraphs__line.html), [step graphs](http://jkriege2.github.io/JKQtPlotter/class_j_k_q_t_p_special_line_horizontal_graph.html), [impulses](https://jkriege2.github.io/JKQtPlotter/group__jkqtplotter__sticks.html)\r\n  - [filled curves](http://jkriege2.github.io/JKQtPlotter/group__jkqtplotter__filledgraphs.html)\r\n  - [barcharts](https://jkriege2.github.io/JKQtPlotter/group__jkqtplotter__barcharts.html) (also stacked)\r\n  - extensive support for different [styles of error indicators](http://jkriege2.github.io/JKQtPlotter/group__jkqtplotter__basegraphserrors.html)\r\n  - [integrated mathematical function parser](http://jkriege2.github.io/JKQtPlotter/group__jkqtptools__math__parser.html) for [parsed function plots](https://jkriege2.github.io/JKQtPlotter/class_j_k_q_t_p_x_parsed_function_line_graph.html) (with intelligent rendering algorithm)\r\n  - line/scatter graphs can also be [based on C/C++ functions](http://jkriege2.github.io/JKQtPlotter/group__jkqtplotter__functiongraphs.html) instead of data series (C++11 support!)\r\n  - [statistical plots)](http://jkriege2.github.io/JKQtPlotter/group__jkqtplotter__statgraphs.html) (e.g. boxplots, violinplots, ...)\r\n  - large variety of [image plots](http://jkriege2.github.io/JKQtPlotter/group__jkqtplotter__imagelots.html) (inclusing different color-scale modes, RGBA-plots, overlays/masks)\r\n  - [contour plots](https://jkriege2.github.io/JKQtPlotter/group__jkqtplotter__imagelots__contour.html)\r\n  - [vector field graphs/quiver plots](https://jkriege2.github.io/JKQtPlotter/group__jkqtplotter__vectorfieldgraphs.html)\r\n  - [financial graphs (candlestick/OHLC)](https://jkriege2.github.io/JKQtPlotter/group__jkqtplotter__financialgraphs.html)\r\n  - [geometric forms (lines, rectangles, polygons, circles, bezier-curves, ...)](http://jkriege2.github.io/JKQtPlotter/group__jkqtplotter__geoplots.html) / [annotations (labels, text, ranges, ...)](http://jkriege2.github.io/JKQtPlotter/group__jkqtplotter__annotations.html)\r\n  - can be easily extended by deriving a new graph from [JKQTPPlotElement](http://jkriege2.github.io/JKQtPlotter/class_j_k_q_t_p_plot_element.html), [JKQTPPlotAnnotationElement](http://jkriege2.github.io/JKQtPlotter/class_j_k_q_t_p_plot_annotation_element.html), [JKQTPGeometricPlotElement](http://jkriege2.github.io/JKQtPlotter/class_j_k_q_t_p_geometric_plot_element.html), [JKQTPGraph](http://jkriege2.github.io/JKQtPlotter/class_j_k_q_t_p_graph.html)\r\n- optional: [OpenCV interface](http://jkriege2.github.io/JKQtPlotter/group__jkqtpinterfaceopencv.html), [CImg interfaces](http://jkriege2.github.io/JKQtPlotter/group__jkqtpinterfacecimg.html)\r\n- CMake-based build system\r\n- extensive set of [Examples/Tutorials](https://jkriege2.github.io/JKQtPlotter/example_tutorial_projects.html)\r\n- extensive doxygen-generated [Documentation](http://jkriege2.github.io/JKQtPlotter/index.html)\r\n\r\n## [Documentation](http://jkriege2.github.io/JKQtPlotter/index.html)\r\nA Documentation (auto-)generated with [doxygen](http://www.doxygen.nl/) from the trunk source code can be found here: \r\n**[http://jkriege2.github.io/JKQTPlotter/index.html](http://jkriege2.github.io/JKQtPlotter/index.html)**\r\n\r\nThere are also some subpage of general intetest:\r\n- [TODO List](http://jkriege2.github.io/JKQtPlotter/page_todo.html)\r\n- [Release Notes \u0026 Version Overview](http://jkriege2.github.io/JKQtPlotter/page_whatsnew.html)\r\n\r\n## [Examples](https://jkriege2.github.io/JKQtPlotter/example_tutorial_projects.html)\r\n\r\n[![EXAMPLES-Page](./screenshots/examplesbanner.png)](https://jkriege2.github.io/JKQtPlotter/example_tutorial_projects.html)\r\n\r\nThere is a [large set of usage examples (with explanations for each) and tutorials](https://jkriege2.github.io/JKQtPlotter/example_tutorial_projects.html) in the folder [`./examples/`](./examples).\r\nAll test-projects are Qt-projects that use tcmake to build. Some of them are also available with additional qmake build-files.\r\n\r\nIn addition: The [Screenshots-folder](./screenshots/) contains several screenshots, partly taken from the provided examples, but also from other software using this libarary (e.g. [QuickFit 3.0](https://github.com/jkriege2/QuickFit3))\r\n\r\n## Building Using CMake\r\n\r\n[![Lates Release](https://img.shields.io/github/v/release/jkriege2/JKQtPlotter)](https://github.com/jkriege2/JKQtPlotter/releases)\r\n\r\nJKQTPlotter contains two different build systems: A modern [CMake](https://cmake.org/)-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.\r\n\r\n\r\nWith [CMake](https://cmake.org/) you can easily build JKQTPlotter and all its examples, by calling something like:\r\n```\r\n    $ mkdir build; cd build\r\n    $ cmake .. -G \"\u003ccmake_generator\u003e\" \"-DCMAKE_PREFIX_PATH=\u003cpath_to_your_qt_sources\u003e\" \"-DCMAKE_INSTALL_PREFIX=\u003cwhere_to_install\u003e\"\r\n    $ cmake --build . --config \"Debug\"\r\n    $ cmake --install . --config \"Debug\"\r\n```\r\n\r\nThis 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:\r\n```\r\n  find_package(JKQTPlotter6 REQUIRED)\r\n  target_link_libraries(${PROJECT_NAME} JKQTPlotter6::JKQTPlotter6)\r\n```\r\nor on a Qt-version agnostic way via:\r\n```\r\n  find_package(JKQTPlotter${QT_VERSION_MAJOR} REQUIRED)\r\n  target_link_libraries(${PROJECT_NAME} JKQTPlotter${QT_VERSION_MAJOR}::JKQTPlotter${QT_VERSION_MAJOR})\r\n```\r\nSee https://jkriege2.github.io/JKQtPlotter/page_buildinstructions__c_m_a_k_e.html for details.\r\n\r\n## Usage via CMake's FetchConten-API\r\n\r\nIn addition to the method described above (i.e. build and install the library and then use it), you can also use JKQTPlotter via CMake's [FetchContent-API](https://cmake.org/cmake/help/latest/module/FetchContent.html). \r\n\r\nFor this method, you need to add these lines to your CMake project:\r\n```\r\ninclude(FetchContent) # once in the project to include the module\r\n# ... now declare JKQTPlotter5/6\r\nFetchContent_Declare(JKQTPlotter${QT_VERSION_MAJOR}\r\n                     GIT_REPOSITORY https://github.com/jkriege2/JKQtPlotter.git\r\n                     # GIT_TAG        v5.0.0)\r\n# ... finally make JKQTPlotter5/6 available\r\nFetchContent_MakeAvailable(JKQTPlotter${QT_VERSION_MAJOR})\r\n```\r\n\r\nThese declare JKQTPlotter and make it available in your project. Afterwards you should be able to link against it, using\r\n```\r\ntarget_link_libraries(${PROJECT_NAME} JKQTPlotter${QT_VERSION_MAJOR}::JKQTPlotter${QT_VERSION_MAJOR})\r\n```\r\n\r\n\r\n## Stargazers over time\r\n\r\n[![Stargazers over time](https://starchart.cc/jkriege2/JKQtPlotter.svg)](https://starchart.cc/jkriege2/JKQtPlotter)\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjkriege2%2Fjkqtplotter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjkriege2%2Fjkqtplotter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjkriege2%2Fjkqtplotter/lists"}