Matplotlib in Rmarkdown/RStudio fails when calling LaTeX on `\$` with Anaconda

Viewed 936

Problem description

I am having to use Anaconda on Windows, and am trying to write an RMarkdown document, knitted into a pdf, where within the RMarkdown I am using some Python snippets. However, when I try make matplotlib use LaTeX (with the rc.params) I find it does not render but hits an error I cannot understand nor fix. The offending lines are

mpl.rcParams.update({"text.usetex": True})
...
plt.title(r'Some Latex with symbol \$')

It is LaTeX trying to interpret the \$ which is throwing issues. As far as I can tell this should be correctly escaped. If I remove the \$ everything works as expected, (or if I replace it with e.g. $e=mc^2$).

The error message

Quitting from lines 31-34 (example.Rmd) 
Error in py_call_impl(callable, dots$args, dots$keywords) : 
  RuntimeError: Evaluation error: KeyError: b'tcrm1200'

Detailed traceback: 
  File "C:\Users\Harry\ANACON~1\lib\site-packages\matplotlib\pyplot.py", line 722, in savefig
    res = fig.savefig(*args, **kwargs)
  File "C:\Users\Harry\ANACON~1\lib\site-packages\matplotlib\figure.py", line 2180, in savefig
    self.canvas.print_figure(fname, **kwargs)
  File "C:\Users\Harry\ANACON~1\lib\site-packages\matplotlib\backends\backend_qt5agg.py", line 88, in print_figure
    super().print_figure(*args, **kwargs)
  File "C:\Users\Harry\ANACON~1\lib\site-packages\matplotlib\backend_bases.py", line 2082, in print_figure
    **kwargs)
  File "C:\Users\Harry\ANACON~1\lib\site-packages\matplotlib\backends\backend_pdf.py", line 2503, in print_pdf
    self.figure.draw(renderer)
  File "C:\Users\Harry\ANACON~1\lib\site-packages\matplotlib\artist.py", line 38, in draw_wrapper
    return draw(artist, renderer, *args, **kwargs)
  File "C:\Users\Harry\ANACON~1\lib\site-packages\matplotlib\figure.py"
Calls: <Anonymous> ... py_capture_output -> force -> <Anonymous> -> py_call_impl
Execution halted

MWE

The following is a .Rmd file running on Rstudio 1.2.5001 (should be using Python 3.7 with Conda3, but I'm not so sure how to dig out the specifics on Windows...).

---
output: pdf_document
---


```{r}
library(reticulate)
```

```{python, echo=FALSE, include=FALSE}
import os
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = r'C:\Users\Harry\Anaconda3\Library\plugins\platforms'
```

```{python, echo=FALSE, include=FALSE}
import matplotlib as mpl
import matplotlib.pyplot as plt
# Setting some default plotting features to give nicer plots. This can be commented out for beginners. 
rc_fonts = {
    "text.usetex": True,
    'text.latex.preview': True, # Gives correct legend alignment.
    'mathtext.default': 'regular',
    'figure.figsize': (6, 4),
    "font.family": "serif",
    "font.serif": "computer modern roman",
}
mpl.rcParams.update(rc_fonts)
```

```{python}
plt.plot([0, 2, 1, 4])
plt.title(r'Some Latex with symbol \$')
plt.show()
```
2 Answers

Just remove the backslash! The string is already protected in single quote format.

plt.title(r'Some Latex with symbol $')

I think u should type in text in 'markdown' section of JupyterNotebook in Ananconda, type the python code in the 'codes' section of the notebook too and finally save it as PDF via LaTeX in the JupyterNotebook. This will solve your problems individually and give u the output I think u r looking for.

Related