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 into any C++ program.
A unique feature of G3P
is the ability to embed plots/animations in Jupyter C++ Notebooks backed by 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 tutorial.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: 👉 👈