diff --git a/README.md b/README.md index ef34bcf..82590b7 100644 --- a/README.md +++ b/README.md @@ -34,10 +34,17 @@ The `plotLaTeX` package is a recent project to make exporting Python data to a L Fig6

+**[Stemplot](examples/StemPlot.ipynb)** + +

+ Fig3 +

+ + **TBD** - 3D scatter - +- Poles Zeros plot ## Installation diff --git a/examples/BarPlot.ipynb b/examples/BarPlot.ipynb index 66d4368..6f8ac7d 100644 --- a/examples/BarPlot.ipynb +++ b/examples/BarPlot.ipynb @@ -498,6 +498,14 @@ "source": [ "m_bar.LaTeXcode()" ] + }, + { + "cell_type": "markdown", + "id": "1e78a199-71cd-4281-afce-56812b156c98", + "metadata": {}, + "source": [ + "___" + ] } ], "metadata": { diff --git a/examples/BoxPlot.ipynb b/examples/BoxPlot.ipynb index 1897306..7722a85 100644 --- a/examples/BoxPlot.ipynb +++ b/examples/BoxPlot.ipynb @@ -230,6 +230,14 @@ "source": [ "Bplt.LaTeXcode()" ] + }, + { + "cell_type": "markdown", + "id": "a158b8e7-3747-427c-bbfe-2bbf3be0b274", + "metadata": {}, + "source": [ + "___" + ] } ], "metadata": { diff --git a/examples/HistPlot.ipynb b/examples/HistPlot.ipynb index 85f8e07..9c01538 100644 --- a/examples/HistPlot.ipynb +++ b/examples/HistPlot.ipynb @@ -226,6 +226,14 @@ "# plot the data using seaborn\n", "sns.histplot(data=Hplt.data, bins=Hplt.bins)" ] + }, + { + "cell_type": "markdown", + "id": "f3a0fd08-5eee-40f0-8ded-8f557e56cff4", + "metadata": {}, + "source": [ + "___" + ] } ], "metadata": { diff --git a/examples/LinePlot.ipynb b/examples/LinePlot.ipynb index 0f37d8c..61209f4 100644 --- a/examples/LinePlot.ipynb +++ b/examples/LinePlot.ipynb @@ -180,6 +180,14 @@ "# save the data as \".csv\" and get the latex figure code\n", "Lplt.export(f_name=\"line_results.csv\")" ] + }, + { + "cell_type": "markdown", + "id": "63aa0ba7-7c63-47da-ba0c-2f28c1bbc674", + "metadata": {}, + "source": [ + "___" + ] } ], "metadata": { diff --git a/examples/StemPlot.ipynb b/examples/StemPlot.ipynb new file mode 100644 index 0000000..8e89fa8 --- /dev/null +++ b/examples/StemPlot.ipynb @@ -0,0 +1,186 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "0091951b-a9f9-4e50-81b4-c28ff867dd7c", + "metadata": {}, + "source": [ + "# Stemplot" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "9fb787a5-e635-420f-ab72-666965da3f16", + "metadata": {}, + "outputs": [], + "source": [ + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "\n", + "from plotLaTeX import StemPlot" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "4a41b718-7111-4381-bbfe-6c3e55cb0eb3", + "metadata": {}, + "outputs": [], + "source": [ + "x = np.arange(5)\n", + "y = np.array([2, 1, 1, 2, -1])" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "0104ba23-1844-4965-9421-a5487a16c4b6", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(3.5, 3))\n", + "plt.stem(x, y)\n", + "plt.ylabel(\"y[k]\")\n", + "plt.xlabel(\"k\")\n", + "plt.grid(alpha=0.3)\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "0215d38a-9fc9-4210-bff1-c42c665cb304", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\\begin{figure}\n", + "% definition of stem style\n", + "\\tikzstyle{stem}=[ycomb,mark=*,mark size=6\\pgflinewidth,color=blue,thick]\n", + "\n", + " \\centering\n", + " \\tikzstyle{every node}=[font=\\footnotesize]\n", + " \\begin{tikzpicture}\n", + " \\begin{axis}[\n", + " xlabel={$k$},\n", + " ylabel={$y[k]$},\n", + " width=7.5cm,\n", + " height=3cm,\n", + " at={(0cm,0cm)},\n", + " scale only axis,\n", + " axis background/.style={fill=white},\n", + " grid=both,\n", + " ]\n", + " \\addplot[stem] plot coordinates{(0,2) (1,1) (2,1) (3,2) (4,-1)};\n", + " \\end{axis}\n", + " \\end{tikzpicture}\n", + " \\caption{Stem plot caption.}\n", + " \\label{fig:Stem plot caption.}\n", + "\\end{figure}\n" + ] + } + ], + "source": [ + "# default plot style\n", + "stem = StemPlot()\n", + "stem.add_xy_vals(x_vals=x, y_vals=y)\n", + "stem.add_xy_labels(x_label=\"$k$\", y_label=\"$y[k]$\")\n", + "stem.LaTeXcode()" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "125c1011-ecaa-47e2-8338-380be1c44ce5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\\begin{figure}\n", + "% definition of stem style\n", + "\\tikzstyle{stem}=[ycomb,mark=*,mark size=6\\pgflinewidth,color=blue,thick]\n", + "\n", + " \\centering\n", + " \\tikzstyle{every node}=[font=\\footnotesize]\n", + " \\begin{tikzpicture}\n", + " \\begin{axis}[\n", + " xlabel={$k$},\n", + " ylabel={$x[k]$},\n", + " axis lines=center,\n", + " xlabel style=right,\n", + " ylabel style=left,\n", + " width=7.5cm,\n", + " height=4cm,\n", + " ymin=-1.5,\n", + " ymax=3.0,\n", + " xmin=-0.5,\n", + " xmax=4.5,\n", + " xtick={0,1,2,3,4},\n", + " ytick={-1,0,1},\n", + " grid=both,\n", + " grid style={dashed,gray!30},\n", + " axis line style={thick,->},\n", + " ]\n", + " \\addplot[stem] plot coordinates{(0,2) (1,1) (2,1) (3,2) (4,-1)};\n", + " \\end{axis}\n", + " \\end{tikzpicture}\n", + " \\caption{Stem plot caption.}\n", + " \\label{fig:Stem plot caption.}\n", + "\\end{figure}\n" + ] + } + ], + "source": [ + "# beautiful plot style\n", + "stem = StemPlot(layout=\"beautiful\")\n", + "stem.add_xy_vals(x_vals=x, y_vals=y)\n", + "stem.LaTeXcode()" + ] + }, + { + "cell_type": "markdown", + "id": "00acace0-1d03-4058-a480-bb6622c7f0f2", + "metadata": {}, + "source": [ + "___" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.12.2" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/images/example_stem.png b/images/example_stem.png new file mode 100644 index 0000000..5b5d0a0 Binary files /dev/null and b/images/example_stem.png differ diff --git a/images/stem_latex_d.png b/images/stem_latex_d.png new file mode 100644 index 0000000..7b99092 Binary files /dev/null and b/images/stem_latex_d.png differ diff --git a/plotLaTeX/__init__.py b/plotLaTeX/__init__.py index 82eb1b5..bd4d04a 100644 --- a/plotLaTeX/__init__.py +++ b/plotLaTeX/__init__.py @@ -2,5 +2,6 @@ from .hist_plot import HistPlot from .box_plot import BoxPlot from .bar_plot import Barplot, MultipleBars +from .stem_plot import StemPlot -__all__ = ["LaTeXplot", "HistPlot", "BoxPlot", "Barplot", "MultipleBars"] +__all__ = ["LaTeXplot", "HistPlot", "BoxPlot", "Barplot", "MultipleBars", "StemPlot"] diff --git a/plotLaTeX/stem_plot.py b/plotLaTeX/stem_plot.py new file mode 100644 index 0000000..c38173c --- /dev/null +++ b/plotLaTeX/stem_plot.py @@ -0,0 +1,75 @@ +import numpy as np + + +class StemPlot: + def __init__(self, layout="default", marker_size=6): + self.layout = layout + self.marker_size = marker_size + self.x_label = "$k$" + self.y_label = "$x[k]$" + + def add_xy_vals(self, x_vals, y_vals): + assert len(x_vals) == len(y_vals) + self.x_vals = x_vals + self.y_vals = y_vals + + def add_xy_labels(self, x_label, y_label): + self.x_label = x_label + self.y_label = y_label + + def LaTeXcode(self, imports=False, caption="Stem plot caption."): + if imports: + print("\tDon“t forget to import the packages:\n") + print(r"\usepackage{graphicx}") + print(r"\usepackage{tikz,pgfplots}") + print("\n*\t*********\n") + print(r"\begin{figure}") + print(r"% definition of stem style") + print( + r"\tikzstyle{stem}=[ycomb,mark=*,mark size=" + + str(self.marker_size) + + r"\pgflinewidth,color=blue,thick]" + ) + print(r"") + print(r" \centering") + print(r" \tikzstyle{every node}=[font=\footnotesize]") + print(r" \begin{tikzpicture}") + print(r" \begin{axis}[") + print(" xlabel={" + self.x_label + "},") + print(" ylabel={" + self.y_label + "},") + + if self.layout == "default": + print(r" width=7.5cm,") + print(r" height=3cm,") + print(r" at={(0cm,0cm)},") + print(r" scale only axis,") + print(r" axis background/.style={fill=white},") + print(r" grid=both,") + + elif self.layout == "beautiful": + print(r" axis lines=center,") + print(r" xlabel style=right,") + print(r" ylabel style=left,") + print(r" width=7.5cm,") + print(r" height=4cm,") + print(f" ymin={np.min(self.y_vals)-0.5},") + print(f" ymax={np.max(self.y_vals)+1.0},") + print(f" xmin={np.min(self.x_vals)-0.5},") + print(f" xmax={np.max(self.x_vals)+0.5},") + y_ticks = np.arange(np.min(self.y_vals), np.max(self.y_vals)) + print(r" xtick={" + ",".join(map(str, self.x_vals)) + "},") + print(r" ytick={" + ",".join(map(str, y_ticks)) + "},") + + print(r" grid=both,") + print(r" grid style={dashed,gray!30},") + print(r" axis line style={thick,->},") + print(r" ]") + stem_coords = " ".join( + f"({xi},{yi})" for xi, yi in zip(self.x_vals, self.y_vals) + ) + print(r" \addplot[stem] plot coordinates{" + stem_coords + "};") + print(r" \end{axis}") + print(r" \end{tikzpicture}") + print(r" \caption{" + caption + "}") + print(r" \label{fig:" + caption + "}") + print(r"\end{figure}")