From d330efa71c577192fdb2ff70f09fa4d1d51939a6 Mon Sep 17 00:00:00 2001 From: HowToSD Date: Tue, 25 Feb 2025 13:18:05 -0800 Subject: [PATCH] Added MPL Pie Chart node. --- __init__.py | 3 ++ docs/images/pie_chart.png | Bin 0 -> 115009 bytes docs/reference/mpl_pie_chart.md | 24 ++++++++++ docs/reference/node_reference.md | 1 + examples/workflows/pie_chart.json | 1 + modules/matplotlib/mpl_pie_chart.py | 68 ++++++++++++++++++++++++++++ pyproject.toml | 2 +- 7 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 docs/images/pie_chart.png create mode 100644 docs/reference/mpl_pie_chart.md create mode 100644 examples/workflows/pie_chart.json create mode 100644 modules/matplotlib/mpl_pie_chart.py diff --git a/__init__.py b/__init__.py index 3a8bc5a..b9c0e72 100644 --- a/__init__.py +++ b/__init__.py @@ -12,6 +12,7 @@ from .modules.cda.py_kv_int_create import PyKvIntCreate from .modules.cda.py_kv_string_create import PyKvStringCreate from .modules.matplotlib.mpl_bar import MPLBar from .modules.matplotlib.mpl_line import MPLLine +from .modules.matplotlib.mpl_pie_chart import MPLPieChart from .modules.matplotlib.mpl_scatter import MPLScatter from .modules.numpy_wrapper.numpy_float_create import NumpyFloatCreate from .modules.numpy_wrapper.numpy_int_create import NumpyIntCreate @@ -153,6 +154,7 @@ NODE_CLASS_MAPPINGS: Dict[str, Type[T]] = { "CDATextCreate": CDATextCreate, "MPLBar": MPLBar, "MPLLine": MPLLine, + "MPLPieChart": MPLPieChart, "MPLScatter": MPLScatter, "NumpyFloatCreate": NumpyFloatCreate, "NumpyIntCreate": NumpyIntCreate, @@ -297,6 +299,7 @@ NODE_DISPLAY_NAME_MAPPINGS: Dict[str, str] = { "CDATextCreate": "CDA Text Create", "MPLBar": "MPL Bar Chart", "MPLLine": "MPL Line Plot", + "MPLPieChart": "MPL Pie Chart", "MPLScatter": "MPL Scatter Plot", "NumpyFloatCreate": "Numpy Float Create", "NumpyIntCreate": "Numpy Int Create", diff --git a/docs/images/pie_chart.png b/docs/images/pie_chart.png new file mode 100644 index 0000000000000000000000000000000000000000..b8045eaf24683cf1a7b8390bb9e2555cdfdbf993 GIT binary patch literal 115009 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