1+1=10

记记笔记,放松一下...

Qt下的图表库小记

简单罗列一下...

Qt对LGPL用户已经很不友好。官方的图表库均不采用LGPL授权。幸好还有几个第三方的可供Qt的LGPL用户使用:

  • KD Chart【KDAB的商业产品,2022年8月份改为MIT协议】
  • Qwt 【不活跃,样式老旧】
  • JKQtPlotter
  • PyQtGraph 【Python下面】

列表

图表库名称 许可类型 说明
Qt Charts GPLv3 / Commercial Qt官方出品,对LGPL用户不友好
QCustomPlot GPLv3 / Commercial 对LGPL用户不友好
Qwt Qwt License 开源免费,可以在开源和闭源项目中使用。Qwt License 类似 LGPL,允许在闭源项目中动态链接使用。
KD Chart MIT KDAB出品,从3.0.0版本【2022年8月份】开始,采用MIT授权。
JKQtPlotter LGPL 对LGPL用户友好
QwtPlot3D zlib 采用zlib协议,对LGPL友好,不过开发早已停顿
ChartDirector Commercial 需要商业许可,适用于商业用途。提供免费试用版本,但需要购买许可证才能在正式项目中使用。

Qt

Qt官方有2D和3D图表库,但都不支持LGPL。

Qt Charts

Qt Charts 从Qt5.7 开始出现,官方出品,支持C++和QML。但是它采用GPLv3和商业授权发布,对LGPL用户不友好。

Qt Data Visualization

Qt Data Visualization 是 Qt 官方提供的一个模块,依赖于OpenGL,用于创建 三维数据可视化 应用。它使开发者能够轻松地将三维数据集可视化,支持多种三维图表类型,如 柱状图、散点图 和 曲面图 等。

采用GPLv3发布,对LGPL用户不友好。

Qt Graphs

是 Qt Data visualization 的后续版本。依赖qrhi抽象层,而不是直接依赖OpenGL。同样对LGPL用户不友好。

KDAB

KDAB 公司对Qt支持还是很不错的。只不过其在Qt5中开发的Qt3D模块,在Qt6中要退役了,比较可惜。Qt公司新的基于QtQucik的3D模块也不再支持LGPL。

KD Chart

KD Chart是KDAB的商业产品,在经历长期的开发停顿后,2022年发布3.0.0,变更为MIT授权。支持二维图表和甘特图。

注意,KDAB 的 KDreports 也改为MIT授权方式发布。

kdiagram

是KDE克隆的KD Chart的早期版本,采用 GPL 发布。

JKQtPlotter

JKQTPlotter 是一个基于 Qt 的开源库,专门用于绘制 二维科学图表。采用LGPL协议发布。

QCustomPlot

QCustomPlot 是一个基于 Qt 的开源 C++ 图形绘制库,专注于 二维数据可视化。它主要用于在 Qt Widgets 应用中嵌入高性能的自定义绘图功能,如 折线图、柱状图、散点图、直方图 等。有轻量和高效的特性。采用GPLv3和商业授权发布,对LGPL用户不友好。

Qwt

Qwt(Qt Widgets for Technical Applications)是一个基于 Qt 的开源库,专门用于在应用程序中创建 技术性图表 和 科学可视化工具。Qwt 提供了各种小部件(Widgets),帮助开发者绘制复杂的二维图表和进行数据可视化。

  • 对LGPL用户友好
  • 长期没有更新,界面不够现代

QwtPlot3D

基于Qt3、Qt4和OpenGL的3D图表库。开发早已停止。采用zlip协议

QChartViewer

QChartViewer 及其底层库 ChartDirector 由 Advanced Software Engineering Ltd. (ASE) 开发。这家公司专注于提供高性能的图表和可视化解决方案,ChartDirector 是其核心产品之一,广泛用于商业和技术应用中的数据可视化。

ChartDirector 是一个支持包括C++、C#、Python、perl、PHP、Java等多种编程语言的图表库的商业产品。

vtk

尽管和图表库没多大关系,还是先列出来。vtk采用BSD授权协议。对LGPL用户友好。

Python

在Python下,除了可以使用各个C++图表库的python绑定,还有一些特色库可用。有的是原生,有的是HTML和javascript。

部分列表如下

PyQtGraph

PyQtGraph 是一个用于 快速绘制交互式图表 和 数据可视化 的 Python 库,它基于 PyQt 或 PySide(Qt 的 Python 绑定),并且专注于 高性能的实时数据可视化。

采用 MIT 授权

matplotlib

matplotlib 支持使用Qt作为后端,可以和PyQt以及PySide集成。

另外还有一些基于matplotlib的库:

  • https://seaborn.pydata.org/
  • https://mpld3.github.io/

plotly

Plotly 的图表是通过 HTML 和 JavaScript 渲染的。无论是在 Python、R 还是 其他语言 中使用,Plotly 最终都会生成一段 HTML 文档,其中嵌入了 JavaScript 代码,用于在 Web 浏览器中渲染图表。采用MIT授权。

  • Plotly Python 库:用于数据可视化的客户端库。
  • Plotly.js:用于前端渲染的 JavaScript 库。

bokeh

Bokeh 是一个专注于 Python 的可视化库,能够与 Python 生态系统中的工具(如 NumPy、Pandas、Dask、Scikit-Learn 等)无缝集成。用户可以使用这些工具处理和分析数据,并将结果通过 Bokeh 转换为可视化图表。

Bokeh 的核心工作原理是将 Python 代码中的数据和图表配置转换为浏览器可以理解的 HTML 和 JavaScript。Bokeh 提供了一个 Bokeh.js 库,这个库在前端使用 JavaScript 渲染图表。Bokeh 会自动处理 Python 端和浏览器端的通信,用户只需编写 Python 代码,无需编写 JavaScript。

Vega-Altair

Altair 是一个声明式的可视化库,基于 Vega 和 Vega-Lite。Altair 允许用户通过简洁的语法创建复杂的可视化图表,专注于统计可视化。

参考

  • https://doc.qt.io/qt-6/qtcharts-index.html
  • https://www.qcustomplot.com/
  • https://qwt.sourceforge.io/
  • https://github.com/jkriege2/JKQtPlotter
  • https://www.kdab.com/development-resources/qt-tools/kd-chart/
  • https://github.com/KDAB/KDChart
  • https://github.com/KDAB/KDReports
  • https://qwtplot3d.sourceforge.net/
  • https://www.advsofteng.com/doc/cdcppdoc/QChartViewer.htm
  • https://github.com/KDE/kdiagram
  • https://www.pyqtgraph.org/
  • https://matplotlib.org/stable/gallery/user_interfaces/embedding_in_qt_sgskip.html
  • https://github.com/plotly/plotly.py
  • https://bokeh.org/
  • https://altair-viz.github.io/

Qt Qt