Closed
Description
Bug report
I was trying to generate some figures using the latex fonts (rc('text', usetex=True)), but I always get an error (I also tried on linux). If I set usetex=False, no error is raised and the figure is properly generated, even the tex characters are generated.
If the figure is not composed by subplots, no error is raised, so, I think is something between subplots and tex.
Code for reproduction
from matplotlib import rc, gridspec
import matplotlib.pyplot as plt
from numpy.random.mtrand import randint
from numpy import linspace
import matplotlib.ticker as mtick
fig = plt.figure(tight_layout=True, figsize=(9, 6))
rc('text', usetex=True)
gs = gridspec.GridSpec(2, 2)
axs = [ fig.add_subplot(gs[0, :]), fig.add_subplot(gs[1, 0]), fig.add_subplot(gs[1, 1])]
colors = ['royalblue', 'darkorange']
all_names = [['TEXT$_1$-A', 'TEXT$_1$-B'], ['TEXT$_2$-A', 'TEXT_2-B']]
for names in all_names:
y_plot = randint(-50, 50, 5000)
x_plot = linspace(0, 100, len(y_plot))
ax = axs[0]
ax.plot(x_plot, y_plot, label='{} / {}'.format(*names) if len(all_names) > 1 else None)
ax.set_xlabel("% of instances")
ax.set_yscale('symlog')
ax.set_ylabel('ratio'.format(*names))
ax.legend(loc='upper right')
ax.xaxis.set_major_locator(mtick.MultipleLocator(25))
ax.xaxis.set_minor_locator(mtick.MultipleLocator(5))
ax.xaxis.set_major_formatter(mtick.PercentFormatter(100))
ax.grid(True, which='Major', axis='both', linestyle='--', color='silver')
ax = axs[1]
ax.plot(x_plot, y_plot, label=r'{} / {}'.format(*names) if len(all_names) > 1 else None)
ax.set_xlim(0, 5)
ax.grid(True, which='both', axis='both', linestyle='--', color='silver')
ax.set_yscale('linear')
ax = axs[2]
ax.plot(x_plot, y_plot, label=r'{} / {}'.format(*names) if len(all_names) > 1 else None)
ax.set_yscale('log')
ax.set_xlim(95, 100)
ax.grid(True, which='Major', axis='both', linestyle='--', color='silver')
ax.xaxis.set_major_locator(mtick.MultipleLocator(5))
ax.xaxis.set_minor_locator(mtick.MultipleLocator(1))
ax.xaxis.set_major_formatter(mtick.PercentFormatter(100))
ax.xaxis.set_minor_formatter(mtick.PercentFormatter(100))
fig.align_labels()
plt.tight_layout()
plt.show()
Actual outcome
Traceback (most recent call last):
File "C:\research\accasim-tests\new_model\analysis\tex_error.py", line 52, in <module>
plt.tight_layout()
File "C:\Program Files\Python36\lib\site-packages\matplotlib\pyplot.py", line 1368, in tight_layout
gcf().tight_layout(pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)
File "C:\Program Files\Python36\lib\site-packages\matplotlib
62A0
\figure.py", line 2476, in tight_layout
pad=pad, h_pad=h_pad, w_pad=w_pad, rect=rect)
File "C:\Program Files\Python36\lib\site-packages\matplotlib\tight_layout.py", line 362, in get_tight_layout_figure
pad=pad, h_pad=h_pad, w_pad=w_pad)
File "C:\Program Files\Python36\lib\site-packages\matplotlib\tight_layout.py", line 111, in auto_adjust_subplotpars
tight_bbox_raw = union([ax.get_tightbbox(renderer) for ax in subplots
File "C:\Program Files\Python36\lib\site-packages\matplotlib\tight_layout.py", line 112, in <listcomp>
if ax.get_visible()])
File "C:\Program Files\Python36\lib\site-packages\matplotlib\axes\_base.py", line 4357, in get_tightbbox
bb_xaxis = self.xaxis.get_tightbbox(renderer)
File "C:\Program Files\Python36\lib\site-packages\matplotlib\axis.py", line 1178, in get_tightbbox
*ticklabelBoxes2,
File "C:\Program Files\Python36\lib\site-packages\matplotlib\axis.py", line 1176, in <genexpr>
if a.get_visible()),
File "C:\Program Files\Python36\lib\site-packages\matplotlib\text.py", line 890, in get_window_extent
bbox, info, descent = self._get_layout(self._renderer)
File "C:\Program Files\Python36\lib\site-packages\matplotlib\text.py", line 298, in _get_layout
clean_line, self._fontproperties, ismath=ismath)
File "C:\Program Files\Python36\lib\site-packages\matplotlib\backends\backend_agg.py", line 201, in get_text_width_height_descent
s, fontsize, renderer=self)
File "C:\Program Files\Python36\lib\site-packages\matplotlib\texmanager.py", line 449, in get_text_width_height_descent
with dviread.Dvi(dvifile, 72 * dpi_fraction) as dvi:
File "C:\Program Files\Python36\lib\site-packages\matplotlib\dviread.py", line 198, in __init__
self.file = open(filename, 'rb')
FileNotFoundError: [Errno 2] No such file or directory: 'C:\\Users\\cgall\\.matplotlib\\tex.cache\\aee1b2d0939944ebcda4231dd9a1549a.dvi'
Matplotlib version
- Operating system: Win 10
- Matplotlib version: 3.1.2
- Matplotlib backend (
print(matplotlib.get_backend())
): TkAgg - Python version: 3.6
- Other libraries: numpy 1.16.3
Matplotlib installed via pip command