Построение графика 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()
выходной график будет:
затем мне нужно написать уценку 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
выход:
- установить.пакеты ('devtools') во-первых, получите функцию install_github
- install_github ("rstudio/reticulate") установите версию dev reticulate
-
в R markdown doc используйте код ниже, чтобы включить функцию.
```{r setup, include=FALSE}
library(knitr)
library(reticulate)
knitr::knit_engines$set(python = reticulate::eng_python)
```
попробуйте, вы получите то, что хотите, и вам не нужно сохранять изображения.
С 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
Шаг 3: Вязать в HTML / PDF / Word и т. д.
продолжайте вязать как обычно. Конечный продукт-красиво отформатированный документ, выполненный в коде Python с использованием R Markdown. RStudio прошел долгий путь, и я удивлен уровнем поддержки, которую он имеет для кода Python, не более известен, поэтому надеюсь, что любой, кто наткнулся на этот ответ, найдет его информативным и чему-то научился новый.