G3P
(G
nuP
lot P
lus P
lus) is a tiny but mighty header-only Modern C++ interface library for gnuplot. It is the most natural and intuitive way of adding gnuplot
support to any C++ program.
A unique feature of G3P
is the ability to embed plots/animations in Jupyter C++ Notebooks with Xeus-Cling kernel for rapid prototyping. If you have Docker, an easy way to learn about this feature is to run the prebuilt container:
docker run -p 8888:8888 -it --rm asobhani/g3p
Then click on the provided URL to connect to the Jupyter Server in the container and open 01_the_basics.ipynb
notebook.
If you don't have Docker, an easier but much slower way is to click on badge to launch it on Binder.
Key features include:
- π₯οΈ Multiplatform (Linux/macOS/Windows)
- π₯ No dependencies (except gnuplot)
- ποΈ Header-only (only one header file)
- πͺΆ Lightweight (~300 lines of code)
- β‘ Fast (all i/o implemented with
C
API andC++11
threading) - π Support embedding plots/animations in Jupyter
C++
Notebooks backed by Xeus-Cling kernel - π« Easy to learn. If you know gnuplot, you're already set.
- π₯ Easily integrates with existing libraries and code (via CMake configs)
- β‘οΈ Support fluent interface
- π Support both C (
%d
,%f
, ...) and C++ (<<
) conventions for passing arguments to gnuplot - π§ͺ Include Catch2 unit tests
- π Well documented
#include <g3p/gnuplot>
g3p::gnuplot gp;
gp << "set samples" << 200 << "\n"
<< "set style data points\n"
<< "plot [-10:10] sin(x),atan(x),cos(atan(x))\n"
Please refer to the interactive documentation for more information: π
π