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: 👉
👈