5

I have a Rmarkdown document containing some python code chunks using the reticulate library. The code executes output perfectly; however, how would I cross-reference the generated plots in the text using its label? I am using bookdown::pdf_documents2 etc, and have no issue with inline reference of R chunks using the standard \@ref(fig:my-plot).

An MWE would be:


```{python, my-plot}
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)
y = np.arange(10)
plt.figure()
plt.plot(x, y)
plt.show()
```

In Figure \@ref(fig:my-plot)....


I have tried without prepending the chunk type (fig, etc.)

I understand I can save the image to file and include it with knitr as a subsequent R chunk, but it would be preferable to do it through the python chunk alone.

  • 2
    You could save the plot and then just reference it using simple Markdown, without a code chunk using the syntax`![caption](myplot.png)`. seems like you have already read [this resource](https://bookdown.org/yihui/rmarkdown-cookbook/cross-ref.html). This says you also need a `fig.cap` option in your Code chunk, but see you already said you tried that – Daniel_j_iii Oct 21 '21 at 15:59
  • Thanks, Daniel. Yes, my current workaround is including the saved plot in a separate R chunk with a label - allowing the cross-referencing to keep the correct numbering throughout the document, for example, Figure 1.1 etc. The benefit of the single chunk is that a PDF image is created for PDF output and a png for the HTML, so if it is possible that way, it would be ideal. – A_Man_Has_No_Name Oct 21 '21 at 16:56

1 Answers1

2

I must have been making an error when previously attempting fig.cap within the chunk, as Daniel correctly suggests in the question comments. Attempting with this again, I can cross-reference perfectly with the python chunk across all HTML, PDF and word outputs. The updated MWE is:

```{python, my-plot, fig.cap="My Caption"}
import matplotlib.pyplot as plt
import numpy as np

x = np.arange(10)
y = np.arange(10)
plt.figure()
plt.plot(x, y)
plt.show()
```

In Figure \@ref(fig:my-plot)...


Each of the outputs in the YAML header required the varying bookdown:: options. For PDF (bookdown::pdf_document2), for word (bookdown::word_document2) and Rmdformats in my case, the option of use_bookdone: true.