%% Copyright 2021-2024 Tobias Enderle %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3c %% of this license or (at your option) any later version. %% The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3c or later is part of all distributions of LaTeX %% version 2005/12/01 or later. \documentclass{article} \usepackage{pyluatex} \usepackage{unicode-math} \usepackage{pgf} \usepackage{url} \title{PyLuaTeX Example -- Matplotlib PGF} \author{Tobias Enderle} \begin{document} \maketitle In this document we demonstrate how \emph{matplotlib} plots can be generated and included in a document. In the Python code in this document, the plot is configured and saved to PGF\footnote{\url{https://ctan.org/pkg/pgf}} code. The PGF code is then included in the document and creates the plot. To avoid intermediate files, the PGF code is saved into an in-memory file using the Python \verb|io.StringIO| class% \footnote{\url{https://docs.python.org/3/library/io.html#io.StringIO}}. \begin{center} \begin{python} # example based on # https://matplotlib.org/stable/gallery/lines_bars_and_markers/simple_plot.html import matplotlib.pyplot as plt import numpy as np import io t = np.arange(0.0, 2.0, 0.01) s = 1 + np.sin(2 * np.pi * t) fig, ax = plt.subplots(figsize=(5, 3.5)) ax.plot(t, s) ax.set(xlabel='time (s)', ylabel='voltage (mV)', title='About as simple as it gets, folks') ax.grid() with io.StringIO() as file: # save to "in-memory file" fig.savefig(file, format='pgf', bbox_inches='tight', pad_inches=0.1) print(file.getvalue()) \end{python} \end{center} For an alternative approach of creating plots with \emph{matplotlib}, consider the example \verb|matplotlib-external.tex|. \end{document}