Rmarkdown是否允许编织matplotlib图?如果是这样,您能帮我解决问题吗?

时间:2019-06-29 21:46:57

标签: python anaconda rstudio r-markdown knitr

编辑找到了解决方案。 Plot Python Plots Inline

我一直在做一个Rmarkdown笔记本来记下我的python学习记录。在RStudio中,直到开始使用matplotlib绘制数据之前,我都可以将包含python代码的文档编织成HTML。奇怪的是,这些图是在代码块内正确生成的。但是,编织后,每次都会出现80%的错误。

这是我的示例代码:

---
title: "Python Plot"
output: html_document
---

```{r setup, include=FALSE}
library(knitr)
knitr::opts_chunk$set(echo = TRUE)
library(reticulate) #Allows for Python to be run in chunks
```


```{python, eval=F}
import numpy as np
trees = np.array(r.trees) #Imported an internal R dataset. It got rid of headers and first row. Don't know how to deal with that right now.
type(trees)
np.shape(trees)
print(trees[1:6,:])

import matplotlib.pyplot as plt
plt.plot(trees[:,0], trees[:,1])
plt.show()
plt.clf() #Reset plot surface
```

同样,在块内进行处理时,此图显示得很好,但不会编织。错误消息显示,

"This application failed to start because it could not find or load the Qt platform plugin "windows" in ",

Reinstalling the application may fix this problem."

我已经卸载并重新安装了Rstudio和Python,并且继续得到相同的结果。我觉得奇怪的是,它可以在块中工作,但不能编织成HTML。我所有其他的python代码都很好。

我有

python 3.7.3(默认值,Mar 27 2019,17:13:21)[MSC v.1915 64位(AMD64)]

Rstudio版本1.2.1335。

我已经阅读了其他解决方案。我相信libEGL.dll与所有其他QT5 * .dll位于同一位置。

3 个答案:

答案 0 :(得分:0)

在导入库中,您必须安装PyQT5并将其导入到Python环境中。因此,例如,我的第一个块如下所示,# Base Libraries的第一行是import PyQt5

---
title: "Cancellations TS"
author: "Bryan Butler"
date: "7/1/2019"
output:
    html_document:
    toc: false
    toc_depth: 1
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE, warning = FALSE, cache.lazy = FALSE)
```

# <strong>Time Series of Auto Policies</strong> {.tabset .tabset-fade .tabset-pills}


<style>
  .main-container {
    max-width: 1200px !important;
    margin-left: auto;
    margin-right: auto;
  }
</style>

{r, loadPython}
library(reticulate)
use_condaenv('timeseries')


## Load Python
{python importLibaries}

# Base libraries
import PyQt5
import pandas as pd
from pandas import Series, DataFrame
from pandas.plotting import lag_plot


import numpy as np
import pyodbc

答案 1 :(得分:0)

我能够对您的代码进行一些修改。我拆开了块进行错误检查。您需要import numpy as np,并且我添加了其他人。这是我要工作的代码。另外,我使用conda虚拟环境,以便Python环境是精确的。这是有效的:

---
title: "test"
author: "Bryan Butler"
date: "7/2/2019"
output: html_document
---

```{r setup, include=FALSE}
library(knitr)
knitr::opts_chunk$set(echo = TRUE)
library(reticulate) #Allows for Python to be run in chunks
use_condaenv('timeseries')
```

```{python import}
import PyQt5
import pandas as pd
from pandas import Series, DataFrame
import numpy as np
import matplotlib.pyplot as plt
```

```{python, test}
trees = np.array(r.trees) #Imported an internal R dataset. It got rid of headers and first row. Don't know how to deal with that right now.
type(trees)
np.shape(trees)
print(trees[1:6,:])
```

```{python plot}
plt.plot(trees[:,0], trees[:,1])
plt.show()
plt.clf() #Reset plot surface
```

答案 2 :(得分:0)

我在这里找到了凯文·阿森诺(Kevin Arseneau)的答案。 Plot Python Plots Inline

由于问题不同,我不会将其称为重复项,但是解决方案可同时解决这两个问题。

需要添加以下代码:

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

这是我更新的工作代码。它与原始问题类似,并针对布莱恩(Bryan)建议的进口商品使用python块进行了更新。

---
title: "Python Plot"
output: html_document
---

```{r setup, include=FALSE}
library(knitr)
knitr::opts_chunk$set(echo = TRUE)
library(reticulate) #Allows for Python to be run in chunks
```

```{python import}
import os
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = '/path/to/Anaconda3/Library/plugins/platforms'
import numpy as np
import matplotlib.pyplot as plt


```{python, eval=TRUE}

trees = np.array(r.trees) #Imported an internal R dataset. It got rid of headers and first row. Don't know how to deal with that right now.
type(trees)
np.shape(trees)
print(trees[1:6,:])


plt.plot(trees[:,0], trees[:,1])
plt.show()
plt.clf() #Reset plot surface
```