Source code for pyphysim.extra.pgfplotshelper

#!/usr/bin/env python

# pylint: disable-all
"""
This module contains useful functions to create pgfplots code (latex
code using the pgfplots package) from python data.

One example of tex code for a plot using pgfplots is show below

.. code-block:: latex

    \\begin{tikzpicture}
      \\begin{axis}[axis options]
        \\addplot [plot options]
        plot [options]
        coordinates {
          (0, 0)
          (1, 1)
          (2, 4)
          (3, 9)};
        \\addlegendentry{Legend of the last line};
      \\end{axis}
    \\end{tikzpicture}

"""


[docs]def generate_pgfplots_plotline(x, y, errors=None, options=None, legend=None): """ This function generates the code corresponding to the "addplot" command in a pgfplots plot for the coordinates given in `x` and `y`. If the parameter `errors` is also provided then error bars will be added in the `y` direction, while options to the addplot command can be passed as a string in the `options` argument. Parameters ---------- x : np.ndarray | list[float] | list[int] The data for the 'x' axis in the plot. y : np.ndarray | list[float] | list[int] The data for the 'x' axis in the plot errors : np.ndarray | list[float] | list[int], optional The error for plotting the errorbars. options : str pgfplot options for the plot line. Ex: "color=red, solid, mark=square, mark options={solid}" legend : str The legend for the plot line. """ import itertools # xxxxxxxxxx Creates the coordinates part of the plot line xxxxxxxxxxxx points = zip(x, y) num_points = min(len(x), len(y)) if errors is None: points_string = "\n".join([str(p) for p in points]) plot_line = "plot[]\ncoordinates{{{0}}};".format(points_string) else: error_points = zip(itertools.repeat(0.0, num_points), errors / 2.0) points_and_errors_list = [ "{0} +- {1}".format(a, b) for a, b in zip(points, error_points) ] points_string = "\n".join(points_and_errors_list) plot_line = ("plot[error bars/.cd, y dir = both, y explicit]\n" "coordinates{{{0}}};").format(points_string) # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # xxxxxxxxxx Get the whole addplot line xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx if options is None: addplot_line = "\\addplot[]\n{0}".format(plot_line) else: addplot_line = "\\addplot[{1}]\n{0}".format(plot_line, options) # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx if legend is not None: legend_line = "\n\\addlegendentry{{{0}}};".format(legend) addplot_line += legend_line return addplot_line
# xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx