There are similar questions on here, but none seem to capture all this problem. If I copy-and-paste the demo code on matplotlib website using a Jupyter Notebook or Anaconda Python on Windows:
"""
Demo of TeX rendering.
You can use TeX to render all of your matplotlib text if the rc
parameter text.usetex is set. This works currently on the agg and ps
backends, and requires that you have tex and the other dependencies
described at http://matplotlib.org/users/usetex.html
properly installed on your system. The first time you run a script
you will see a lot of output from tex and associated tools. The next
time, the run may be silent, as a lot of the information is cached in
~/.tex.cache
"""
import numpy as np
import matplotlib.pyplot as plt
# Example data
t = np.arange(0.0, 1.0 + 0.01, 0.01)
s = np.cos(4 * np.pi * t) + 2
plt.rc('text', usetex=True)
plt.rc('font', family='serif')
plt.plot(t, s)
plt.xlabel(r'\textbf{time} (s)')
plt.ylabel(r'\textit{voltage} (mV)',fontsize=16)
plt.title(r"\TeX\ is Number "
r"$\displaystyle\sum_{n=1}^\infty\frac{-e^{i\pi}}{2^n}$!",
fontsize=16, color='gray')
# Make room for the ridiculously large title.
plt.subplots_adjust(top=0.8)
plt.savefig('tex_demo')
plt.show()
I get the following error (Note: similar issues whether running Python 3.x or 2.7x).
Traceback (most recent call last):
File "demo.py", line 34, in <module>
plt.savefig('tex_demo')
File "/usr/lib/python3/dist-packages/matplotlib/pyplot.py", line 688, in savefig
res = fig.savefig(*args, **kwargs)
File "/usr/lib/python3/dist-packages/matplotlib/figure.py", line 1565, in savefig
self.canvas.print_figure(*args, **kwargs)
File "/usr/lib/python3/dist-packages/matplotlib/backend_bases.py", line 2232, in print_figure
**kwargs)
File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_agg.py", line 527, in print_png
FigureCanvasAgg.draw(self)
File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_agg.py", line 474, in draw
self.figure.draw(self.renderer)
File "/usr/lib/python3/dist-packages/matplotlib/artist.py", line 61, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "/usr/lib/python3/dist-packages/matplotlib/figure.py", line 1159, in draw
func(*args)
File "/usr/lib/python3/dist-packages/matplotlib/artist.py", line 61, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "/usr/lib/python3/dist-packages/matplotlib/axes/_base.py", line 2324, in draw
a.draw(renderer)
File "/usr/lib/python3/dist-packages/matplotlib/artist.py", line 61, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "/usr/lib/python3/dist-packages/matplotlib/axis.py", line 1108, in draw
renderer)
File "/usr/lib/python3/dist-packages/matplotlib/axis.py", line 1058, in _get_tick_bboxes
extent = tick.label1.get_window_extent(renderer)
File "/usr/lib/python3/dist-packages/matplotlib/text.py", line 961, in get_window_extent
bbox, info, descent = self._get_layout(self._renderer)
File "/usr/lib/python3/dist-packages/matplotlib/text.py", line 352, in _get_layout
ismath=False)
File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_agg.py", line 229, in get_text_width_height_descent
renderer=self)
File "/usr/lib/python3/dist-packages/matplotlib/texmanager.py", line 675, in get_text_width_height_descent
dvifile = self.make_dvi(tex, fontsize)
File "/usr/lib/python3/dist-packages/matplotlib/texmanager.py", line 422, in make_dvi
report))
RuntimeError: LaTeX was not able to process the following string:
b'lp'
Here is the full report generated by LaTeX:
This happened on iPython notebooks running on Windows or Linux. However, when I ran this in a bash shell using:
python3 demo.py
I got this little gem in the stderr output:
sh: 1: latex: not found
This error did not appear in the Windows shell or PowerShell and only appeared in the GNU/Linux bash shell. It appears that installing pylatex or other Python latex tools will not actually install LaTeX itself and may result in you not getting errors telling you it is not installed. Hopefully this will help others.
Once I installed LaTex (using sudo apt install latex
on Ubuntu), I reran the demo:
python3 demo.py
And now I get this:
Traceback (most recent call last):
File "demo.py", line 34, in <module>
plt.savefig('tex_demo')
File "/usr/lib/python3/dist-packages/matplotlib/pyplot.py", line 688, in savefig
res = fig.savefig(*args, **kwargs)
File "/usr/lib/python3/dist-packages/matplotlib/figure.py", line 1565, in savefig
self.canvas.print_figure(*args, **kwargs)
File "/usr/lib/python3/dist-packages/matplotlib/backend_bases.py", line 2232, in print_figure
**kwargs)
File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_agg.py", line 527, in print_png
FigureCanvasAgg.draw(self)
File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_agg.py", line 474, in draw
self.figure.draw(self.renderer)
File "/usr/lib/python3/dist-packages/matplotlib/artist.py", line 61, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "/usr/lib/python3/dist-packages/matplotlib/figure.py", line 1159, in draw
func(*args)
File "/usr/lib/python3/dist-packages/matplotlib/artist.py", line 61, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "/usr/lib/python3/dist-packages/matplotlib/axes/_base.py", line 2324, in draw
a.draw(renderer)
File "/usr/lib/python3/dist-packages/matplotlib/artist.py", line 61, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "/usr/lib/python3/dist-packages/matplotlib/axis.py", line 1108, in draw
renderer)
File "/usr/lib/python3/dist-packages/matplotlib/axis.py", line 1058, in _get_tick_bboxes
extent = tick.label1.get_window_extent(renderer)
File "/usr/lib/python3/dist-packages/matplotlib/text.py", line 961, in get_window_extent
bbox, info, descent = self._get_layout(self._renderer)
File "/usr/lib/python3/dist-packages/matplotlib/text.py", line 352, in _get_layout
ismath=False)
File "/usr/lib/python3/dist-packages/matplotlib/backends/backend_agg.py", line 229, in get_text_width_height_descent
renderer=self)
File "/usr/lib/python3/dist-packages/matplotlib/texmanager.py", line 675, in get_text_width_height_descent
dvifile = self.make_dvi(tex, fontsize)
File "/usr/lib/python3/dist-packages/matplotlib/texmanager.py", line 422, in make_dvi
report))
RuntimeError: LaTeX was not able to process the following string:
b'lp'
Here is the full report generated by LaTeX:
This is pdfTeX, Version 3.14159265-2.6-1.40.16 (TeX Live 2015/Debian) (preloaded format=latex)
restricted \write18 enabled.
entering extended mode
(./710670ddfec8e192b546b57b05284e6c.tex
LaTeX2e <2016/02/01>
Babel <3.9q> and hyphenation patterns for 3 language(s) loaded.
(/usr/share/texlive/texmf-dist/tex/latex/base/article.cls
Document Class: article 2014/09/29 v1.4h Standard LaTeX document class
(/usr/share/texlive/texmf-dist/tex/latex/base/size10.clo))
! LaTeX Error: File `type1cm.sty' not found.
Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: sty)
Enter file name:
! Emergency stop.
<read *>
l.3 \renewcommand
{\rmdefault}{pnc}^^M
No pages of output.
Transcript written on 710670ddfec8e192b546b57b05284e6c.log.
This seems to reduce the problem to the same one as Python: Unable to Render Tex in Matplotlib and running sudo apt install dvipng texlive-latex-extra texlive-fonts-recommended
(again on Ubuntu, but installing the extras packages on Mac should have similar effects).
Unfortunately, I have not figured out how to fix this under Windows (in particular the Jupyter Notebook under Windows) and since I have a number of students who use Windows, any help is appreciated.