Python interface to generate (readable) Tikz figures.
Create and activate python environment, then install tikzfigure with
pip install tikzfigure
Generate a simple TikZ figure with nodes and arrows, see Figure 1.
from tikzfigure import TikzFigure
fig = TikzFigure()
n1 = fig.node(x=0, y=0, shape="circle", fill="blue!40!green", content="Tikz")
n2 = fig.node(x=2, y=0, shape="circle", fill="purple!40!orange", content="Figure")
fig.draw([n1, n2], line_width=2, arrows="->", color="gray")
fig.variable("R", 1.0)
with fig.loop("angle", range(40, 340, 20)) as loop:
loop.node(
x=r"\R*cos(\angle)",
y=r"\R*sin(\angle)",
shape="circle",
fill="red!50",
)
fig.show()For segment-local TikZ options, you can also build paths fluently with
Node.to(...) and keep path-wide styling on fig.draw(...).
You can also save the figure as a .tikz file or print the LaTeX code:
print(fig)% --------------------------------------------- %
% Tikzfigure generated by tikzfigure v0.2.1 %
% https://github.com/max-models/tikzfigure %
% --------------------------------------------- %
\begin{tikzpicture}
\pgfmathsetmacro{\R}{1.0}
\node[shape=circle, fill=blue!40!green] (node0) at ({0}, {0}) {Tikz};
\node[shape=circle, fill=purple!40!orange] (node1) at ({2}, {0}) {Figure};
\draw[color=gray, line width=2, arrows=->] (node0) to (node1);
\foreach \angle in {40,60,80,100,120,140,160,180,200,220,240,260,280,300,320}{
\node[shape=circle, fill=red!50] () at ({\R*cos(\angle)}, {\R*sin(\angle)}) {};
}
\end{tikzpicture}
Note that to visualize the plots in a popup or in jupyterlab, install with
pip install "tikzfigure[vis]"
For quick scripts and notebooks you can skip the TikzFigure object
altogether. The module-level functions draw on an implicit current figure
that is created the first time you use one, much like matplotlib.pyplot:
import tikzfigure as tf
tf.draw([(0, 0), (1, 1), (2, 0)], arrows="->")
tf.circle((1, 1), radius=0.3, fill="cyan!40")
tf.show()Use tf.figure() to start a new figure, tf.gcf() to get hold of the current
one, tf.scf(fig) to make an existing figure current, and tf.close() to
throw the current figure away. Anything you can do on a TikzFigure is
available as a module-level function.
The explicit API remains the recommended one for larger figures, since it is the only way to work on several figures at once.
tikzfigure includes IPython magic commands for compiling TikZ figures directly in Jupyter notebooks!
Load the extension:
%load_ext tikzfigure.ipythonThen use the %%tikz cell magic:
%%tikz
\begin{tikzpicture}
\draw[thick, blue] (0,0) circle (2cm);
\node at (0,0) {Hello TikZ!};
\end{tikzpicture}
See tutorials for more examples!
