首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matplotlib Latex故障

Matplotlib Latex故障
EN

Stack Overflow用户
提问于 2021-10-13 21:39:30
回答 1查看 253关注 0票数 0

我使用Jupyter notebook访问python。我在我的MacBook上遇到了很多环境问题,所以我删除了所有的python文件并重新安装了anaconda。一开始,它是有效的,但在复杂的任务之后,我又开始收到奇怪的错误:(这里是其中之一。我尝试使用pip,conda c-forge来安装latex。latex模块是在site-package中下载的,但是错误是相同的。

代码语言:javascript
复制
# %% load libraries
import os
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec

# %% aesthetics
plt.style.use('seaborn-bright')
plt.rc('text', usetex=True)
plt.rc('font', family='serif', size=10)

# %% generate fake data
x = np.arange(0, 10, 1)
y0 = np.square(x)
y1 = np.sqrt(x)
y2 = 2 + x

# %% figure

# create figure
fig = plt.figure(figsize=(6, 6))

# parition the figure into 4 subplots with 'gridspec'
gs = gridspec.GridSpec(2, 4, # we want 2 rows, 4 cols
                       figure=fig, # this gs applies to figure
                       hspace=0.5, wspace=1, # separation between plots
                       width_ratios=[1, 1, 1, 1], # ration between the
                       # first and second column
                       height_ratios=[1, 1]) # ration between the first ans second row

# add plots
ax0 = fig.add_subplot(gs[0, 0:2]) # this will occupy the first row-first colum
ax1 = fig.add_subplot(gs[0, 2:4]) # and so on and so forth...
ax2 = fig.add_subplot(gs[1, 1:3])

# plot left-top
ax0.plot(x, y0, marker='o', color='green')
ax0.set_xlabel(r'$x$')
ax0.set_ylabel(r'$x^{2}$')
ax0.grid(ls='--')

# plot right-top
ax1.plot(x, y1, marker='s', color='red')
ax1.set_xlabel(r'$x$')
ax1.set_ylabel(r'$\sqrt{x}$')
ax1.grid(ls='--')

# plot middle-bottom
ax2.plot(x, y2, marker='d', color='blue')
ax2.set_xlabel(r'$x$')
ax2.set_ylabel(r'$2 + x$')
ax2.grid(ls='--')

# save plot
out_f = os.path.join(os.getcwd(), 'multiple_plots.pdf')
fig.savefig(out_f)

# show plot
plt.show()
代码语言:javascript
复制
---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/texmanager.py in _run_checked_subprocess(self, command, tex, cwd)
    251         try:
--> 252             report = subprocess.check_output(
    253                 command, cwd=cwd if cwd is not None else self.texcache,

~/opt/anaconda3/envs/dataviz/lib/python3.8/subprocess.py in check_output(timeout, *popenargs, **kwargs)
    414 
--> 415     return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
    416                **kwargs).stdout

~/opt/anaconda3/envs/dataviz/lib/python3.8/subprocess.py in run(input, capture_output, timeout, check, *popenargs, **kwargs)
    492 
--> 493     with Popen(*popenargs, **kwargs) as process:
    494         try:

~/opt/anaconda3/envs/dataviz/lib/python3.8/subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text)
    857 
--> 858             self._execute_child(args, executable, preexec_fn, close_fds,
    859                                 pass_fds, cwd, env,

~/opt/anaconda3/envs/dataviz/lib/python3.8/subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, start_new_session)
   1703                         err_msg = os.strerror(errno_num)
-> 1704                     raise child_exception_type(errno_num, err_msg, err_filename)
   1705                 raise child_exception_type(err_msg)

FileNotFoundError: [Errno 2] No such file or directory: 'latex'

The above exception was the direct cause of the following exception:

RuntimeError                              Traceback (most recent call last)
/var/folders/lp/kfk0rkcj6bj31b_4y46369qr0000gn/T/ipykernel_30630/3384632287.py in <module>
     69 # save plot
     70 out_f = os.path.join(os.getcwd(), 'multiple_plots.pdf')
---> 71 fig.savefig(out_f)
     72 
     73 # show plot

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/figure.py in savefig(self, fname, transparent, **kwargs)
   3003                 patch.set_edgecolor('none')
   3004 
-> 3005         self.canvas.print_figure(fname, **kwargs)
   3006 
   3007         if transparent:

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/backend_bases.py in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, pad_inches, bbox_extra_artists, backend, **kwargs)
   2253                 # force the figure dpi to 72), so we need to set it again here.
   2254                 with cbook._setattr_cm(self.figure, dpi=dpi):
-> 2255                     result = print_method(
   2256                         filename,
   2257                         facecolor=facecolor,

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/backend_bases.py in wrapper(*args, **kwargs)
   1667             kwargs.pop(arg)
   1668 
-> 1669         return func(*args, **kwargs)
   1670 
   1671     return wrapper

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/_api/deprecation.py in wrapper(*inner_args, **inner_kwargs)
    429                          else deprecation_addendum,
    430                 **kwargs)
--> 431         return func(*inner_args, **inner_kwargs)
    432 
    433     return wrapper

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/backends/backend_pdf.py in print_pdf(self, filename, dpi, bbox_inches_restore, metadata)
   2723                 RendererPdf(file, dpi, height, width),
   2724                 bbox_inches_restore=bbox_inches_restore)
-> 2725             self.figure.draw(renderer)
   2726             renderer.finalize()
   2727             if not isinstance(filename, PdfPages):

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     72     @wraps(draw)
     73     def draw_wrapper(artist, renderer, *args, **kwargs):
---> 74         result = draw(artist, renderer, *args, **kwargs)
     75         if renderer._rasterizing:
     76             renderer.stop_rasterizing()

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     49                 renderer.start_filter()
     50 
---> 51             return draw(artist, renderer, *args, **kwargs)
     52         finally:
     53             if artist.get_agg_filter() is not None:

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/figure.py in draw(self, renderer)
   2778 
   2779             self.patch.draw(renderer)
-> 2780             mimage._draw_list_compositing_images(
   2781                 renderer, self, artists, self.suppressComposite)
   2782 

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/image.py in _draw_list_compositing_images(renderer, parent, artists, suppress_composite)
    130     if not_composite or not has_images:
    131         for a in artists:
--> 132             a.draw(renderer)
    133     else:
    134         # Composite any adjacent images together

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     49                 renderer.start_filter()
     50 
---> 51             return draw(artist, renderer, *args, **kwargs)
     52         finally:
     53             if artist.get_agg_filter() is not None:

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/_api/deprecation.py in wrapper(*inner_args, **inner_kwargs)
    429                          else deprecation_addendum,
    430                 **kwargs)
--> 431         return func(*inner_args, **inner_kwargs)
    432 
    433     return wrapper

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/axes/_base.py in draw(self, renderer, inframe)
   2919             renderer.stop_rasterizing()
   2920 
-> 2921         mimage._draw_list_compositing_images(renderer, self, artists)
   2922 
   2923         renderer.close_group('axes')

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/image.py in _draw_list_compositing_images(renderer, parent, artists, suppress_composite)
    130     if not_composite or not has_images:
    131         for a in artists:
--> 132             a.draw(renderer)
    133     else:
    134         # Composite any adjacent images together

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     49                 renderer.start_filter()
     50 
---> 51             return draw(artist, renderer, *args, **kwargs)
     52         finally:
     53             if artist.get_agg_filter() is not None:

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/axis.py in draw(self, renderer, *args, **kwargs)
   1135 
   1136         ticks_to_draw = self._update_ticks()
-> 1137         ticklabelBoxes, ticklabelBoxes2 = self._get_tick_bboxes(ticks_to_draw,
   1138                                                                 renderer)
   1139 

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/axis.py in _get_tick_bboxes(self, ticks, renderer)
   1061     def _get_tick_bboxes(self, ticks, renderer):
   1062         """Return lists of bboxes for ticks' label1's and label2's."""
-> 1063         return ([tick.label1.get_window_extent(renderer)
   1064                  for tick in ticks if tick.label1.get_visible()],
   1065                 [tick.label2.get_window_extent(renderer)

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/axis.py in <listcomp>(.0)
   1061     def _get_tick_bboxes(self, ticks, renderer):
   1062         """Return lists of bboxes for ticks' label1's and label2's."""
-> 1063         return ([tick.label1.get_window_extent(renderer)
   1064                  for tick in ticks if tick.label1.get_visible()],
   1065                 [tick.label2.get_window_extent(renderer)

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/text.py in get_window_extent(self, renderer, dpi)
    901 
    902         with cbook._setattr_cm(self.figure, dpi=dpi):
--> 903             bbox, info, descent = self._get_layout(self._renderer)
    904             x, y = self.get_unitless_position()
    905             x, y = self.get_transform().transform((x, y))

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/text.py in _get_layout(self, renderer)
    304 
    305         # Full vertical extent of font, including ascenders and descenders:
--> 306         _, lp_h, lp_d = renderer.get_text_width_height_descent(
    307             "lp", self._fontproperties,
    308             ismath="TeX" if self.get_usetex() else False)

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/backends/_backend_pdf_ps.py in get_text_width_height_descent(self, s, prop, ismath)
     86             texmanager = self.get_texmanager()
     87             fontsize = prop.get_size_in_points()
---> 88             w, h, d = texmanager.get_text_width_height_descent(
     89                 s, fontsize, renderer=self)
     90             return w, h, d

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/texmanager.py in get_text_width_height_descent(self, tex, fontsize, renderer)
    397         else:
    398             # use dviread.
--> 399             dvifile = self.make_dvi(tex, fontsize)
    400             with dviread.Dvi(dvifile, 72 * dpi_fraction) as dvi:
    401                 page, = dvi

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/texmanager.py in make_dvi(self, tex, fontsize)
    289             # and thus replace() works atomically.
    290             with TemporaryDirectory(dir=Path(dvifile).parent) as tmpdir:
--> 291                 self._run_checked_subprocess(
    292                     ["latex", "-interaction=nonstopmode", "--halt-on-error",
    293                      texfile], tex, cwd=tmpdir)

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/texmanager.py in _run_checked_subprocess(self, command, tex, cwd)
    254                 stderr=subprocess.STDOUT)
    255         except FileNotFoundError as exc:
--> 256             raise RuntimeError(
    257                 'Failed to process string with tex because {} could not be '
    258                 'found'.format(command[0])) from exc

RuntimeError: Failed to process string with tex because latex could not be found

---------------------------------------------------------------------------
FileNotFoundError                         Traceback (most recent call last)
~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/texmanager.py in _run_checked_subprocess(self, command, tex, cwd)
    251         try:
--> 252             report = subprocess.check_output(
    253                 command, cwd=cwd if cwd is not None else self.texcache,

~/opt/anaconda3/envs/dataviz/lib/python3.8/subprocess.py in check_output(timeout, *popenargs, **kwargs)
    414 
--> 415     return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
    416                **kwargs).stdout

~/opt/anaconda3/envs/dataviz/lib/python3.8/subprocess.py in run(input, capture_output, timeout, check, *popenargs, **kwargs)
    492 
--> 493     with Popen(*popenargs, **kwargs) as process:
    494         try:

~/opt/anaconda3/envs/dataviz/lib/python3.8/subprocess.py in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags, restore_signals, start_new_session, pass_fds, encoding, errors, text)
    857 
--> 858             self._execute_child(args, executable, preexec_fn, close_fds,
    859                                 pass_fds, cwd, env,

~/opt/anaconda3/envs/dataviz/lib/python3.8/subprocess.py in _execute_child(self, args, executable, preexec_fn, close_fds, pass_fds, cwd, env, startupinfo, creationflags, shell, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite, restore_signals, start_new_session)
   1703                         err_msg = os.strerror(errno_num)
-> 1704                     raise child_exception_type(errno_num, err_msg, err_filename)
   1705                 raise child_exception_type(err_msg)

FileNotFoundError: [Errno 2] No such file or directory: 'latex'

The above exception was the direct cause of the following exception:

RuntimeError                              Traceback (most recent call last)
~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/IPython/core/formatters.py in __call__(self, obj)
    339                 pass
    340             else:
--> 341                 return printer(obj)
    342             # Finally look for special method names
    343             method = get_real_method(obj, self.print_method)

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/IPython/core/pylabtools.py in <lambda>(fig)
    251 
    252     if 'png' in formats:
--> 253         png_formatter.for_type(Figure, lambda fig: print_figure(fig, 'png', **kwargs))
    254     if 'retina' in formats or 'png2x' in formats:
    255         png_formatter.for_type(Figure, lambda fig: retina_figure(fig, **kwargs))

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/IPython/core/pylabtools.py in print_figure(fig, fmt, bbox_inches, **kwargs)
    135         FigureCanvasBase(fig)
    136 
--> 137     fig.canvas.print_figure(bytes_io, **kw)
    138     data = bytes_io.getvalue()
    139     if fmt == 'svg':

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/backend_bases.py in print_figure(self, filename, dpi, facecolor, edgecolor, orientation, format, bbox_inches, pad_inches, bbox_extra_artists, backend, **kwargs)
   2228                        else suppress())
   2229                 with ctx:
-> 2230                     self.figure.draw(renderer)
   2231 
   2232             if bbox_inches:

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     72     @wraps(draw)
     73     def draw_wrapper(artist, renderer, *args, **kwargs):
---> 74         result = draw(artist, renderer, *args, **kwargs)
     75         if renderer._rasterizing:
     76             renderer.stop_rasterizing()

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     49                 renderer.start_filter()
     50 
---> 51             return draw(artist, renderer, *args, **kwargs)
     52         finally:
     53             if artist.get_agg_filter() is not None:

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/figure.py in draw(self, renderer)
   2778 
   2779             self.patch.draw(renderer)
-> 2780             mimage._draw_list_compositing_images(
   2781                 renderer, self, artists, self.suppressComposite)
   2782 

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/image.py in _draw_list_compositing_images(renderer, parent, artists, suppress_composite)
    130     if not_composite or not has_images:
    131         for a in artists:
--> 132             a.draw(renderer)
    133     else:
    134         # Composite any adjacent images together

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     49                 renderer.start_filter()
     50 
---> 51             return draw(artist, renderer, *args, **kwargs)
     52         finally:
     53             if artist.get_agg_filter() is not None:

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/_api/deprecation.py in wrapper(*inner_args, **inner_kwargs)
    429                          else deprecation_addendum,
    430                 **kwargs)
--> 431         return func(*inner_args, **inner_kwargs)
    432 
    433     return wrapper

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/axes/_base.py in draw(self, renderer, inframe)
   2919             renderer.stop_rasterizing()
   2920 
-> 2921         mimage._draw_list_compositing_images(renderer, self, artists)
   2922 
   2923         renderer.close_group('axes')

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/image.py in _draw_list_compositing_images(renderer, parent, artists, suppress_composite)
    130     if not_composite or not has_images:
    131         for a in artists:
--> 132             a.draw(renderer)
    133     else:
    134         # Composite any adjacent images together

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/artist.py in draw_wrapper(artist, renderer, *args, **kwargs)
     49                 renderer.start_filter()
     50 
---> 51             return draw(artist, renderer, *args, **kwargs)
     52         finally:
     53             if artist.get_agg_filter() is not None:

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/axis.py in draw(self, renderer, *args, **kwargs)
   1135 
   1136         ticks_to_draw = self._update_ticks()
-> 1137         ticklabelBoxes, ticklabelBoxes2 = self._get_tick_bboxes(ticks_to_draw,
   1138                                                                 renderer)
   1139 

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/axis.py in _get_tick_bboxes(self, ticks, renderer)
   1061     def _get_tick_bboxes(self, ticks, renderer):
   1062         """Return lists of bboxes for ticks' label1's and label2's."""
-> 1063         return ([tick.label1.get_window_extent(renderer)
   1064                  for tick in ticks if tick.label1.get_visible()],
   1065                 [tick.label2.get_window_extent(renderer)

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/axis.py in <listcomp>(.0)
   1061     def _get_tick_bboxes(self, ticks, renderer):
   1062         """Return lists of bboxes for ticks' label1's and label2's."""
-> 1063         return ([tick.label1.get_window_extent(renderer)
   1064                  for tick in ticks if tick.label1.get_visible()],
   1065                 [tick.label2.get_window_extent(renderer)

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/text.py in get_window_extent(self, renderer, dpi)
    901 
    902         with cbook._setattr_cm(self.figure, dpi=dpi):
--> 903             bbox, info, descent = self._get_layout(self._renderer)
    904             x, y = self.get_unitless_position()
    905             x, y = self.get_transform().transform((x, y))

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/text.py in _get_layout(self, renderer)
    304 
    305         # Full vertical extent of font, including ascenders and descenders:
--> 306         _, lp_h, lp_d = renderer.get_text_width_height_descent(
    307             "lp", self._fontproperties,
    308             ismath="TeX" if self.get_usetex() else False)

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/backends/backend_agg.py in get_text_width_height_descent(self, s, prop, ismath)
    227             texmanager = self.get_texmanager()
    228             fontsize = prop.get_size_in_points()
--> 229             w, h, d = texmanager.get_text_width_height_descent(
    230                 s, fontsize, renderer=self)
    231             return w, h, d

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/texmanager.py in get_text_width_height_descent(self, tex, fontsize, renderer)
    397         else:
    398             # use dviread.
--> 399             dvifile = self.make_dvi(tex, fontsize)
    400             with dviread.Dvi(dvifile, 72 * dpi_fraction) as dvi:
    401                 page, = dvi

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/texmanager.py in make_dvi(self, tex, fontsize)
    289             # and thus replace() works atomically.
    290             with TemporaryDirectory(dir=Path(dvifile).parent) as tmpdir:
--> 291                 self._run_checked_subprocess(
    292                     ["latex", "-interaction=nonstopmode", "--halt-on-error",
    293                      texfile], tex, cwd=tmpdir)

~/opt/anaconda3/envs/dataviz/lib/python3.8/site-packages/matplotlib/texmanager.py in _run_checked_subprocess(self, command, tex, cwd)
    254                 stderr=subprocess.STDOUT)
    255         except FileNotFoundError as exc:
--> 256             raise RuntimeError(
    257                 'Failed to process string with tex because {} could not be '
    258                 'found'.format(command[0])) from exc

RuntimeError: Failed to process string with tex because latex could not be found
EN

回答 1

Stack Overflow用户

发布于 2021-10-18 06:37:24

下载MacTex解决了这个问题

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69562632

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档