Skip to content
/ g3p Public

gnuplot for Modern C++ with support for Jupyter

License

Notifications You must be signed in to change notification settings

arminms/g3p

Repository files navigation

G3P

GitHub Release GitHub License Build and Test (Linux/macOS/Windows) GitHub issues view documentation Binder

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 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 Binder 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 and C++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

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