R Markdown: Как я могу сделать RStudio отображать графики Python inline вместо нового?

Итак, я в последнее время широко использую R Markdown, и я вполне доволен тем, что он может сделать.

Тем не менее, у меня проблема с графиками Python. У меня есть кусок кода Python, где я рисую несколько фигур в Python.

Когда я сделаю это с помощью R, RStudio отобразит все графики, сгенерированные в этом фрагменте, бок о бок.

К сожалению, делая то же самое с фрагментом кода Python, RStudio открывает новое окно, где он отображает график, затем выполнение кода останавливается до тех пор, пока я не закрою это окно, а затем отобразит следующую фигуру, я должен закрыть ее снова, и т.д.

Есть ли возможность заставить RStudio поместить цифры в строку, а затем продолжить выполнение кода? Заранее спасибо за помощь!

Ответ 1

Чтобы расширить мой предыдущий комментарий, я уточню полный ответ. При использовании matplotlib графики отображаются с использованием Qt, поэтому вы получаете всплывающие окна.

Если мы используем fig.savefig вместо pyplot.show а затем pyplot.close мы можем избежать всплывающих окон. Вот минимальный пример:

---
output: html_document
---

## Python *pyplot*

'''{python pyplot, echo=FALSE}
import matplotlib
import matplotlib.pyplot as plt
import numpy as np

t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2 * np.pi * t)

fig, ax = plt.subplots()
ax.plot(t, s)

ax.set(xlabel='time (s)', ylabel='voltage (mV)',
       title='About as simple as it gets, folks')
ax.grid()

fig.savefig("pyplot.png")
plt.close(fig)
'''

'''{r, echo=FALSE}
knitr::include_graphics("pyplot.png")
'''

Который производит следующее без какого-либо прерывания процесса:

enter image description here

Источник: matplotlib.org

Примечание: согласно примечаниям к выпуску RStudio v1.2.679-1 Preview, эта версия будет отображать графики matplotlib, генерируемые кусками Python.

Обновить

Используя последний предварительный выпуск, упомянутый выше, обновление чанка для использования pyplot.show теперь будет отображаться встроенным по желанию.

'''{python pyplot, echo=FALSE}
import matplotlib
import matplotlib.pyplot as plt
import numpy as np

t = np.arange(0.0, 2.0, 0.01)
s = 1 + np.sin(2 * np.pi * t)

fig, ax = plt.subplots()
ax.plot(t, s)

ax.set(xlabel='time (s)', ylabel='voltage (mV)',
       title='About as simple as it gets, folks')
ax.grid()

plt.show()
'''

Для пользователей Anaconda

Если вы используете Anaconda в качестве своего дистрибутива Python, у вас может возникнуть проблема, когда Qt не найден в RStudio из-за проблемы с отсутствующей переменной пути/среды.

Ошибка будет выглядеть следующим образом:

Не удалось запустить это приложение, так как не удалось найти или загрузить плагин платформы Qt "windows" в "". Повторная установка приложения может решить эту проблему.

Быстрое исправление состоит в добавлении следующего к блоку python для настройки переменной окружения.

import os
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = '/path/to/Anaconda3/Library/plugins/platforms'

Замените /path/to на соответствующее местоположение в вашем дистрибутиве Anaconda.