Построение графика matplotlib с кодом Python в документе R Markdown

можно ли использовать код Python matplotlib для рисования графика в RStudio?

например, ниже кода Python matplotlib:

import numpy as np
import matplotlib.pyplot as plt

n = 256
X = np.linspace(-np.pi,np.pi,n,endpoint=True)
Y = np.sin(2*X)

plt.plot (X, Y+1, color='blue', alpha=1.00)
plt.plot (X, Y-1, color='blue', alpha=1.00)
plt.show()

выходной график будет:

enter image description here

затем мне нужно написать уценку R, чтобы включить этот код и автоматически генерировать график после вязания уценки.

3 ответов


одним из возможных решений является сохранение графика в виде изображения, а затем загрузка файла в markdown.

### Call python code sample
```{r,engine='python'}
import numpy as np
import matplotlib.pyplot as plt

n = 256
X = np.linspace(-np.pi,np.pi,n,endpoint=True)
Y = np.sin(2*X)

fig, ax = plt.subplots( nrows=1, ncols=1 )
ax.plot (X, Y+1, color='blue', alpha=1.00)
ax.plot (X, Y-1, color='blue', alpha=1.00)
#plt.show()
fig.savefig('foo.png', bbox_inches='tight')
print "finished"
```
Output image:
![output](foo.png)

#### The End

выход:

enter image description here


  1. установить.пакеты ('devtools') во-первых, получите функцию install_github
  2. install_github ("rstudio/reticulate") установите версию dev reticulate
  3. в R markdown doc используйте код ниже, чтобы включить функцию.

    ```{r setup, include=FALSE}
    library(knitr)
    library(reticulate)
    knitr::knit_engines$set(python = reticulate::eng_python)
    ```

попробуйте, вы получите то, что хотите, и вам не нужно сохранять изображения.

Imgur


С reticulate, но в большинстве случаев, пытаясь следовать учебнику, вы можете столкнуться с некоторыми техническими особенностями, которые не были достаточно объяснены.

мой ответ немного опоздал, но я надеюсь, что это тщательное пошаговое руководство, чтобы сделать это правильно - не рендеринг, а затем загрузить его как png, но код python выполнен более "изначально".

Шаг 1: Настройка Python из RStudio

вы хотите вставить кусок R и выполните следующий код, чтобы настроить путь к версии Python, которую вы хотите использовать. Значение по умолчанию python который поставляется с большинством ОС, как правило, устаревший python 2 и не там, где вы устанавливаете свои пакеты. Именно поэтому важно сделать это, чтобы убедиться, что Rstudio будет использовать указанный экземпляр python, где ваш matplotlib библиотека (и другие библиотеки, которые вы будете использовать для этого проекта) можно найти:

library(reticulate)
# change the following to point to the desired path on your system
use_python('/Users/Samuel/anaconda3/bin/python')
# prints the python configuration
py_config()

вы должны ожидать, что ваша сеанс настраивается с указанными вами параметрами:

python:         /Users/Samuel/anaconda3/bin/python
libpython:      /Users/Samuel/anaconda3/lib/libpython3.6m.dylib
pythonhome:     /Users/Samuel/anaconda3:/Users/Samuel/anaconda3
version:        3.6.3 |Anaconda custom (64-bit)| (default, Oct  6 2017, 12:04:38)  [GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)]
numpy:          /Users/Samuel/anaconda3/lib/python3.6/site-packages/numpy
numpy_version:  1.15.2

python versions found: 
 /Users/Samuel/anaconda3/bin/python
 /usr/bin/python
 /usr/local/bin/python
 /usr/local/bin/python3
 /Users/Samuel/.virtualenvs/r-tensorflow/bin/python

Шаг 2: знакомый plt.show

добавить кусок Python (не R!) в вашем документе R Markdown (см. прилагаемый скриншот), и теперь вы можете написать собственный код Python. Это значит, что знакомый plt.show() и plt.imshow() будет работать без дополнительной работы. Он будет отображаться и может быть скомпилирован в HTML / PDF с помощью knitr.

это будет работать:

plt.imshow(my_image, cmap='gray') 

или более подробный пример:

import numpy as np
import matplotlib.pyplot as plt
import os
import cv2

DATADIR = '/Users/Samuel/Datasets/PetImages'
CATEGORIES = ['Dog', 'Cat']

for category in CATEGORIES:
    path = os.path.join(DATADIR, category) # path to cat or dog dir
    for img in os.listdir(path):
        img_array = cv2.imread(os.path.join(path,img), cv2.IMREAD_GRAYSCALE)
        plt.imshow(img_array, cmap='gray')
        plt.show()
        break
    break

выход: enter image description here

Шаг 3: Вязать в HTML / PDF / Word и т. д.

продолжайте вязать как обычно. Конечный продукт-красиво отформатированный документ, выполненный в коде Python с использованием R Markdown. RStudio прошел долгий путь, и я удивлен уровнем поддержки, которую он имеет для кода Python, не более известен, поэтому надеюсь, что любой, кто наткнулся на этот ответ, найдет его информативным и чему-то научился новый.

enter image description here