Skip to content

Open Source · LGPL Licensed

Qt Plotting Library

A 2D/3D plotting library for Qt applications, for scientific computing and engineering data visualization.

C++11/17 CMake Qt 5.12+ / Qt 6
20+ Chart Types
2D & 3D Visualization
Qt 5 & 6 Supported
LGPL Commercial Use

Core Features

2D and 3D plotting for Qt applications, from line charts to scientific visualization.

Performance

QPainter rendering pipeline optimized for large datasets. Redraw strategies keep real-time plots responsive.

Chart Types

20+ built-in chart types: curves, scatter, bar, box, histogram, spectrogram, K-line, vector field, polar plots, and 3D surfaces.

CMake & Qt6

CMake support with find_package(qwt). Single-file amalgamation available. Compatible with Qt 5.12+ and Qt 6.

Multi-Axis System

Create any number of independent axes through the parasite plot architecture, similar to matplotlib's twin axis system, with interaction support across all of them.

Flat Visual Style

Clean, flat visual style replacing the legacy embossed look. Fits current application design conventions.

Figure Layout

matplotlib-inspired QwtFigure for multi-plot grid layouts. Interactive drag, resize, and manage subplots with overlay widgets.

Quick Start

Add QWT to your project.

CMake (Recommended)

1
2
3
4
5
6
# Find and link QWT
find_package(qwt REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE qwt::plot)

# For 3D plotting
target_link_libraries(${PROJECT_NAME} PRIVATE qwt::plot3d)

Single File

1
2
3
4
5
6
7
8
// Add two files to your project:
//   src-amalgamate/QwtPlot.h
//   src-amalgamate/QwtPlot.cpp

#include "QwtPlot.h"

auto* plot = new QwtPlot();
auto* curve = new QwtPlotCurve("My Data");

First Plot

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
#include <qwt_plot.h>
#include <qwt_plot_curve.h>

auto* plot = new QwtPlot("My First Plot");
auto* curve = new QwtPlotCurve("Sine Wave");

QVector<QPointF> data;
for (double x = 0; x < 10.0; x += 0.1)
    data.append(QPointF(x, std::sin(x)));
curve->setSamples(data);

curve->attach(plot);
plot->resize(600, 400);
plot->show();