title: How to set latex path for matplotlib
body: <p>I am trying to plot latex with matplotlib.
  I've installed latex with pip.
  this <a href="https://matplotlib.org/users/mathtext.html#example" rel="nofollow noreferrer">example</a> works well</p>
  
  <pre><code>import numpy as np
  import matplotlib.pyplot as plt
  t = np.arange(0.0, 2.0, 0.01)
  s = np.sin(2*np.pi*t)
  
  plt.plot(t,s)
  plt.title(r'$\alpha_i &gt; \beta_i$', fontsize=20)
  plt.text(1, -0.6, r'$\sum_{i=0}^\infty x_i$', fontsize=20)
  plt.text(0.6, 0.6, r'$\mathcal{A}\mathrm{sin}(2 \omega t)$',
           fontsize=20)
  plt.xlabel('time (s)')
  plt.ylabel('volts (mV)')
  plt.show()
  </code></pre>
  
  <p>while <code>matplotlib.rcParams['text.usetex'] = True</code> encounters latex error.</p>
  
  <pre><code>import numpy as np
  import matplotlib.pyplot as plt
  plt.rcParams['text.usetex'] = True
  t = np.arange(0.0, 2.0, 0.01)
  s = np.sin(2*np.pi*t)
  
  plt.plot(t,s)
  plt.title(r'$\alpha_i &gt; \beta_i$', fontsize=20)
  plt.text(1, -0.6, r'$\sum_{i=0}^\infty x_i$', fontsize=20)
  plt.text(0.6, 0.6, r'$\mathcal{A}\mathrm{sin}(2 \omega t)$',
           fontsize=20)
  plt.xlabel('time (s)')
  plt.ylabel('volts (mV)')
  plt.show()
  </code></pre>
  
  <p>which produces this stack</p>
  
  <blockquote>
    <p>--------------------------------------------------------------------------- FileNotFoundError                         Traceback (most recent call
    last)
    ~/anaconda3/envs/tf11/lib/python3.6/site-packages/IPython/core/formatters.py
    in <strong>call</strong>(self, obj)
        330                 pass
        331             else:
    --> 332                 return printer(obj)
        333             # Finally look for special method names
        334             method = get_real_method(obj, self.print_method)</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/IPython/core/pylabtools.py
    in (fig)
        235 
        236     if 'png' in formats:
    --> 237         png_formatter.for_type(Figure, lambda fig: print_figure(fig, 'png', **kwargs))
        238     if 'retina' in formats or 'png2x' in formats:
        239         png_formatter.for_type(Figure, lambda fig: retina_figure(fig, **kwargs))</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/IPython/core/pylabtools.py
    in print_figure(fig, fmt, bbox_inches, **kwargs)
        119 
        120     bytes_io = BytesIO()
    --> 121     fig.canvas.print_figure(bytes_io, **kw)
        122     data = bytes_io.getvalue()
        123     if fmt == 'svg':</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/matplotlib/backend_bases.py
    in print_figure(self, filename, dpi, facecolor, edgecolor,
    orientation, format, bbox_inches, **kwargs)    2047<br>
    orientation=orientation,    2048                         dryrun=True,
    -> 2049                         **kwargs)    2050                     renderer = self.figure._cachedRenderer    2051<br>
    bbox_artists = kwargs.pop("bbox_extra_artists", None)</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py
    in print_png(self, filename_or_obj, *args, **kwargs)
        508 
        509         """
    --> 510         FigureCanvasAgg.draw(self)
        511         renderer = self.get_renderer()
        512 </p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py
    in draw(self)
        400         toolbar = self.toolbar
        401         try:
    --> 402             self.figure.draw(self.renderer)
        403             # A GUI class may be need to update a window using this draw, so
        404             # don't forget to call the superclass.</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/matplotlib/artist.py
    in draw_wrapper(artist, renderer, *args, **kwargs)
         48                 renderer.start_filter()
         49 
    ---> 50             return draw(artist, renderer, *args, **kwargs)
         51         finally:
         52             if artist.get_agg_filter() is not None:</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/matplotlib/figure.py
    in draw(self, renderer)    1650     1651<br>
    mimage._draw_list_compositing_images(
    -> 1652                 renderer, self, artists, self.suppressComposite)    1653     1654<br>
    renderer.close_group('figure')</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/matplotlib/image.py
    in _draw_list_compositing_images(renderer, parent, artists,
    suppress_composite)
        136     if not_composite or not has_images:
        137         for a in artists:
    --> 138             a.draw(renderer)
        139     else:
        140         # Composite any adjacent images together</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/matplotlib/artist.py
    in draw_wrapper(artist, renderer, *args, **kwargs)
         48                 renderer.start_filter()
         49 
    ---> 50             return draw(artist, renderer, *args, **kwargs)
         51         finally:
         52             if artist.get_agg_filter() is not None:</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/matplotlib/axes/_base.py
    in draw(self, renderer, inframe)    2602<br>
    renderer.stop_rasterizing()    2603 
    -> 2604         mimage._draw_list_compositing_images(renderer, self, artists)    2605     2606         renderer.close_group('axes')</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/matplotlib/image.py
    in _draw_list_compositing_images(renderer, parent, artists,
    suppress_composite)
        136     if not_composite or not has_images:
        137         for a in artists:
    --> 138             a.draw(renderer)
        139     else:
        140         # Composite any adjacent images together</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/matplotlib/artist.py
    in draw_wrapper(artist, renderer, *args, **kwargs)
         48                 renderer.start_filter()
         49 
    ---> 50             return draw(artist, renderer, *args, **kwargs)
         51         finally:
         52             if artist.get_agg_filter() is not None:</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/matplotlib/axis.py
    in draw(self, renderer, *args, **kwargs)    1185         ticks_to_draw
    = self._update_ticks(renderer)    1186         ticklabelBoxes, ticklabelBoxes2 = self._get_tick_bboxes(ticks_to_draw,
    -> 1187                                                                 renderer)    1188     1189         for tick in ticks_to_draw:</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/matplotlib/axis.py
    in _get_tick_bboxes(self, ticks, renderer)    1123         for tick in
    ticks:    1124             if tick.label1On and
    tick.label1.get_visible():
    -> 1125                 extent = tick.label1.get_window_extent(renderer)    1126<br>
    ticklabelBoxes.append(extent)    1127             if tick.label2On and
    tick.label2.get_visible():</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/matplotlib/text.py
    in get_window_extent(self, renderer, dpi)
        927             raise RuntimeError('Cannot get window extent w/o renderer')
        928 
    --> 929         bbox, info, descent = self._get_layout(self._renderer)
        930         x, y = self.get_unitless_position()
        931         x, y = self.get_transform().transform_point((x, y))</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/matplotlib/text.py
    in _get_layout(self, renderer)
        311                 w, h, d = renderer.get_text_width_height_descent(clean_line,
        312                                                         self._fontproperties,
    --> 313                                                         ismath=ismath)
        314             else:
        315                 w, h, d = 0, 0, 0</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/matplotlib/backends/backend_agg.py
    in get_text_width_height_descent(self, s, prop, ismath)
        207             fontsize = prop.get_size_in_points()
        208             w, h, d = texmanager.get_text_width_height_descent(
    --> 209                 s, fontsize, renderer=self)
        210             return w, h, d
        211 </p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/matplotlib/texmanager.py
    in get_text_width_height_descent(self, tex, fontsize, renderer)
        462         else:
        463             # use dviread. It sometimes returns a wrong descent.
    --> 464             dvifile = self.make_dvi(tex, fontsize)
        465             with dviread.Dvi(dvifile, 72 * dpi_fraction) as dvi:
        466                 page = next(iter(dvi))</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/matplotlib/texmanager.py
    in make_dvi(self, tex, fontsize)
        326                 self._run_checked_subprocess(
        327                     ["latex", "-interaction=nonstopmode", "--halt-on-error",
    --> 328                      texfile], tex)
        329             for fname in glob.glob(basefile + '*'):
        330                 if not fname.endswith(('dvi', 'tex')):</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/site-packages/matplotlib/texmanager.py
    in _run_checked_subprocess(self, command, tex)
        296             report = subprocess.check_output(command,
        297                                              cwd=self.texcache,
    --> 298                                              stderr=subprocess.STDOUT)
        299         except subprocess.CalledProcessError as exc:
        300             raise RuntimeError(</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/subprocess.py in
    check_output(timeout, *popenargs, **kwargs)
        334 
        335     return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
    --> 336                **kwargs).stdout
        337 
        338 </p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/subprocess.py in run(input,
    timeout, check, *popenargs, **kwargs)
        401         kwargs['stdin'] = PIPE
        402 
    --> 403     with Popen(*popenargs, **kwargs) as process:
        404         try:
        405             stdout, stderr = process.communicate(input, timeout=timeout)</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/subprocess.py in <strong>init</strong>(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)
        705                                 c2pread, c2pwrite,
        706                                 errread, errwrite,
    --> 707                                 restore_signals, start_new_session)
        708         except:
        709             # Cleanup if the child failed starting.</p>
    
    <p>~/anaconda3/envs/tf11/lib/python3.6/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)    1331                             else:    1332<br>
    err_msg += ': ' + repr(orig_executable)
    -> 1333                     raise child_exception_type(errno_num, err_msg)    1334                 raise child_exception_type(err_msg)<br>
    1335 </p>
    
    <p>FileNotFoundError: [Errno 2] No such file or directory: 'latex'</p>
  </blockquote>