Modern C++ interface library for Gnuplot with Jupyter support
G3P (GnuPlot Plus Plus) 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 01thebasics.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
CAPI andC++11threading) - 📊 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
Quick example
++
#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: 👉 👈