From 47c7e884e56ecfb42777e3a8fd95f1dc6ad3168b Mon Sep 17 00:00:00 2001 From: Domenico Testa Date: Thu, 29 Jan 2026 22:51:06 +0100 Subject: [PATCH] feat: README file --- README.md | 13 +++++++++++++ plot_example.png | Bin 0 -> 13804 bytes 2 files changed, 13 insertions(+) create mode 100644 plot_example.png diff --git a/README.md b/README.md index 6039804..5d52ff8 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,17 @@ # A function plotter in python A recreational programming project. + The idea is to implement a simple math expression language and simple features to plot functions. + +For now a simple matplotlib based implementation is provided. + +Example: + +``` +from plotter.matplotlib import plot_expression + +plot_expression("sin(x) * 2^(3*x)", start=-10.0, stop=10.0, increment=0.1) +``` + +![Function plotted in the [-10.0, 10.0] range with 0.1 increments](./plot_example.png) diff --git a/plot_example.png b/plot_example.png new file mode 100644 index 0000000000000000000000000000000000000000..7eadc35edbf617c17429c3c3f61671852723badf GIT binary patch literal 13804 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 gN^w0$#H0*dU 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 literal 0 HcmV?d00001