[Matplotlib-users] Creating Colored Axis Labels using LaTeX in Interactive Mode

Joseph Fox-Rabinovitz jfoxrabinovitz at gmail.com
Mon Jul 11 12:05:12 EDT 2016


Have an update on my previous question. I have tried to follow the
instructions at http://matplotlib.org/users/pgf.html for settting up
the PGF backend for PNG and PDF rendering. This method does not work
either:

    import matplotlib as mpl
    from matplotlib.backends.backend_pgf import FigureCanvasPgf
    matplotlib.backend_bases.register_backend('png', FigureCanvasPgf)
    from matplotlib import pyplot as plt

    matplotlib.rc('pgf', texsystem='pdflatex')  # from running latex -v
    preamble = matplotlib.rcParams.setdefault('pgf.preamble', [])
    preamble.append(r'\usepackage{color}')

    # Text config
    matplotlib.rc('text', usetex=True)
    preamble = matplotlib.rcParams.setdefault('text.latex.preamble', [])
    preamble.append(r'\usepackage{color}')

    ax = plt.plot((0, 1), (1, 2))[0].axes
    ax.set_ylabel(r'Y $\;$ \textcolor[rgb]{1.0, 0.0,
0.0}{\hdashrule[0.5ex]{3cm}{1pt}{1pt 0pt}}')
    ax.set_xlabel(r'N $\;$ \textcolor[rgb]{0.0, 1.0,
0.0}{\rule[0.5ex]{3cm}{1pt}}')
    plt.savefig('test.png')

Yields the exact same figure and PNG file with the incorrect black
lines as above. Note that turning off the three lines under `# Text
config` makes the TeX commands print out verbatim, even in the saved
figure. Perhaps there is a way to render the PNG correctly without
pre-clobbering with the text system?

Regards,

    -Joe



On Mon, Jul 11, 2016 at 11:12 AM, Joseph Fox-Rabinovitz
<jfoxrabinovitz at gmail.com> wrote:
> I originally posted to Stack Overflow at
> http://stackoverflow.com/q/38274681/2988730 (and accidentally to the
> SourceForge version of this list).
>
> I am trying to follow the answer at
> http://stackoverflow.com/a/38008501/2988730 to an earlier question of
> mine to create colored and styled legend-like entries. I have the
> following code:
>
>     import matplotlib as mpl
>     mpl.use('ps')
>     from matplotlib import pyplot as plt
>
>     mpl.rc('text', usetex=True)
>     mpl.rc('text.latex', preamble='\\usepackage{color}\n\\usepackage{dashrule}')
>
>     plt.ion()
>     ax = plt.plot((0, 1), (1, 2))[0].axes
>     ax.set_ylabel(r'Y $\;$ \textcolor[rgb]{1.0, 0.0,
> 0.0}{\hdashrule[0.5ex]{3cm}{1pt}{1pt 0pt}}')
>     ax.set_xlabel(r'N $\;$ \textcolor[rgb]{0.0, 1.0,
> 0.0}{\rule[0.5ex]{3cm}{1pt}}')
>     plt.savefig('test.ps')
>
> The result is as expected. The labels contain black text with a red
> line on the Y label and a green line on the X label:
> http://i.stack.imgur.com/JCiLI.png.
>
> However, when I try the exact same set of commands without the
> `mpl.use('ps')` line (using `'qt4agg'` backend on my system), the
> figure neither saves corectly nor shows up correctly on screen:
>
>     import matplotlib as mpl
>     from matplotlib import pyplot as plt
>
>     mpl.rc('text', usetex=True)
>     mpl.rc('text.latex', preamble='\\usepackage{color}\n\\usepackage{dashrule}')
>
>     plt.ion()
>     ax = plt.plot((0, 1), (1, 2))[0].axes
>     ax.set_ylabel(r'Y $\;$ \textcolor[rgb]{1.0, 0.0,
> 0.0}{\hdashrule[0.5ex]{3cm}{1pt}{1pt 0pt}}')
>     ax.set_xlabel(r'N $\;$ \textcolor[rgb]{0.0, 1.0,
> 0.0}{\rule[0.5ex]{3cm}{1pt}}')
>
>     plt.savefig('test.png')
>     plt.show()
>
> The result of `plt.savefig` (http://i.stack.imgur.com/h2LXn.png) and
> `plt.show` (http://i.stack.imgur.com/0Ow7c.png) are basically the same
> in this case. The lines after the text show up black.
>
> How do I get the colors to show up in the labels with the default
> interactive backend?
>
> Regards,
>
>     -Joe


More information about the Matplotlib-users mailing list