Странный сбой после сохранения многих цветовых схем с использованием matplotlib
Я использую matplotlib(с включенным LaTex и agg backend) для отображения гидродинамического моделирования с использованием pcolormesh
функция. Система: Ubuntu 16.04
Python: Python 2.7.12
Matplotlib: 1.5.1-1ubuntu1 Я также добавляю дополнительную ось, используя twinx
twiny
После сохранения ~300 png изображений я получаю сбой, указывающий на нерабочую команду преобразования dvi при обработке заголовка. Я всегда использую pylab.close("all")
чтобы закрыть мою фигуру после каждого процесса сохранения.
pylab.rc('text', usetex=True)
pylab.rc('text.latex', preamble=[r"\usepackage{amsmath}", r"\usepackage{amssymb}", r"\usepackage[alsoload=astronomy]{siunitx}"])
pylab.close("all")
f, ax = pylab.subplots(1)
cmap = pylab.cm.jet
cmap.set_bad('w',1.)
if in logquantity:
plot = ax.pcolormesh(x, y, quantity , vmax=maxvalue, vmin=minvalue, norm=LogNorm(vmax= maxvalue, vmin = minvalue), cmap=cmap)
else:
plot = ax.pcolormesh(x, y, quantity, vmax=maxvalue, vmin=minvalue, cmap=cmap)
ax.set_title("Title")
ax.set_aspect("equal")
ax.set_xscale("log")
ax.grid()
...<More Formatting stuff>
ax2 = ax.axes.twiny()
ax3 = ax.twinx()
...<Formatting labels, setting scales etc>
pylab.savefig("test.png", dpi = 800, bbox_inches='tight')
pylab.close("all")
pylab.savefig("test.png", dpi = 800, bbox_inches='tight')
File "/usr/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 689, in savefig
fig.canvas.draw_idle() # need this if 'transparent=True' to reset colors
File "/usr/lib/python2.7/dist-packages/matplotlib/backend_bases.py", line 2026, in draw_idle
self.draw(*args, **kwargs)
File "/usr/lib/python2.7/dist-packages/matplotlib/backends/backend_agg.py", line 474, in draw
self.figure.draw(self.renderer)
File "/usr/lib/python2.7/dist-packages/matplotlib/artist.py", line 61, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/matplotlib/figure.py", line 1159, in draw
func(*args)
File "/usr/lib/python2.7/dist-packages/matplotlib/artist.py", line 61, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/matplotlib/axes/_base.py", line 2324, in draw
a.draw(renderer)
File "/usr/lib/python2.7/dist-packages/matplotlib/artist.py", line 61, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/matplotlib/text.py", line 792, in draw
mtext=mtext)
File "/usr/lib/python2.7/dist-packages/matplotlib/backends/backend_agg.py", line 253, in draw_tex
Z = texmanager.get_grey(s, size, self.dpi)
File "/usr/lib/python2.7/dist-packages/matplotlib/texmanager.py", line 583, in get_grey
pngfile = self.make_png(tex, fontsize, dpi)
File "/usr/lib/python2.7/dist-packages/matplotlib/texmanager.py", line 524, in make_png
'dvipng: \n\n' % dvifile + report)
RuntimeError: dvipng was not able to process the following file:
$HOME/.cache/matplotlib/tex.cache/2664bc1e879cb69289e1663e63a1c713.dvi
Here is the full report generated by dvipng:
No dvipng error report available.
Если я проверю упомянутое местоположение.cache, то смогу найти упомянутый файл dvi. если я использую dvipng, я получаю совершенно правильно отображенный заголовок, который он должен поместить в график. Я предполагаю, что какой-то кэш / буфер заполнен. Если это касается только линейных сюжетов с использованием plot, semilogy, semilogx и loglog, я получаю эту ошибку после гораздо большего количества изображений. Я также могу предоставить данные о форматировании (или любую другую дополнительную информацию), если кто-то считает, что они имеют отношение к этой проблеме.
Заранее благодарю за ответы:-)
РЕДАКТИРОВАТЬ: строка $\rho$$\left[6.96e-20 \frac{\si{\gram}}{\si{\centi \meter \cubed}}\right]$, $t =\num{0.00e+00}\text{y}$, $n_R = \num{300}$, $n_{\varphi} = \num{50}$, $n_z = \num{401},\ [C.L.] = 1.14e+02\text{pc}$
Png версия кэшированного файла Это результат, когда я копирую кэшированный файл в другое место и преобразую его в png вручную, используя dvipng.
Проблема не характерна для этого сюжета. Это может случиться с любым сюжетом. Он отлично работает для первых 300 участков. Это не всегда один и тот же сюжет, из-за которого он падает. Это одна из проблем изучения проблемы. Существует цикл, который проходит через все величины, а затем вызывает функции для построения
for quantityname in quantities:
quantitydict = quantities[quantityname]
quantity = quantitydict["data"]
Есть 18 из этих количеств за такт. EDIT2(дополнительная информация) Ошибка возникает чаще, когда на компьютере, на котором она запущена, недостаточно свободной основной памяти (ниже 10 ГБ, сценарий использует приблизительно 1 ГБ во время работы). Также иногда проявляется по-разному. Это дает ошибку LaTeX. Все предыдущие графики, созданные в процессе работы, работают отлично, и я копирую строку и компилирую ее в LaTeX, и получаю правильный результат. Сообщение об ошибке:
pylab.savefig("test.png", dpi = 800, bbox_inches='tight')
File "/usr/lib/python2.7/dist-packages/matplotlib/pyplot.py", line 688, in savefig
res = fig.savefig(*args, **kwargs)
File "/usr/lib/python2.7/dist-packages/matplotlib/figure.py", line 1565, in savefig
self.canvas.print_figure(*args, **kwargs)
File "/usr/lib/python2.7/dist-packages/matplotlib/backend_bases.py", line 2180, in print_figure
**kwargs)
File "/usr/lib/python2.7/dist-packages/matplotlib/backends/backend_agg.py", line 527, in print_png
FigureCanvasAgg.draw(self)
File "/usr/lib/python2.7/dist-packages/matplotlib/backends/backend_agg.py", line 474, in draw
self.figure.draw(self.renderer)
File "/usr/lib/python2.7/dist-packages/matplotlib/artist.py", line 61, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/matplotlib/figure.py", line 1159, in draw
func(*args)
File "/usr/lib/python2.7/dist-packages/matplotlib/artist.py", line 61, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/matplotlib/axes/_base.py", line 2324, in draw
a.draw(renderer)
File "/usr/lib/python2.7/dist-packages/matplotlib/artist.py", line 61, in draw_wrapper
draw(artist, renderer, *args, **kwargs)
File "/usr/lib/python2.7/dist-packages/matplotlib/text.py", line 749, in draw
bbox, info, descent = textobj._get_layout(renderer)
File "/usr/lib/python2.7/dist-packages/matplotlib/text.py", line 361, in _get_layout
ismath=ismath)
File "/usr/lib/python2.7/dist-packages/matplotlib/backends/backend_agg.py", line 229, in get_text_width_height_descent
renderer=self)
File "/usr/lib/python2.7/dist-packages/matplotlib/texmanager.py", line 675, in get_text_width_height_descent
dvifile = self.make_dvi(tex, fontsize)
File "/usr/lib/python2.7/dist-packages/matplotlib/texmanager.py", line 422, in make_dvi
report))
RuntimeError: LaTeX was not able to process the following string:
'CFL $\\\\Delta t_\\\\text{min}$$\\\\left[4.65e+05 \\\\text{yrs}\\\\right]$, $t =\\\\num{3.80e+03}\\\\text{y}$, $n_R = \\\\num{300}$, $n_{\\\\varphi} = \\\\num{50}$, $n_z = \\\\num{401},\\\\ [C.L.] = 1.14e+02\\\\text{pc}$'
Here is the full report generated by LaTeX:
No latex error report available.