【问题标题】:Does Rmarkdown allow knitting of matplotlib plots? If so, will you help me troubleshoot?Rmarkdown 是否允许编织 matplotlib 图?如果是这样,你会帮我解决问题吗?
【发布时间】:2019-11-11 05:57:14
【问题描述】:

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

我一直在制作一个 Rmarkdown 笔记本来记录我的 Python 研究。在 RStudio 中,我已经能够毫无问题地将包含我的 python 代码的文档编织成 HTML,直到我开始使用 matplotlib 绘制数据。奇怪的是,这些图是在代码块中正确生成的。但是编织后,每次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(默认,2019 年 3 月 27 日,17:13:21)[MSC v.1915 64 位 (AMD64)]

Rstudio 版本 1.2.1335。

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

【问题讨论】:

  • 尝试谷歌搜索该错误消息:此应用程序无法启动,因为它无法找到或加载 Qt 平台插件“windows”。各种命中可能会有用。
  • 谢谢,我申请了,但有些没有申请,有些似乎远高于我的水平。我只是不明白为什么它在环境中起作用。
  • @Ken,它可能是重复的。我刚刚花了最后一个小时或更长时间阅读并尝试做事,但我不得不承认我的无能。我不明白。我不知道它是否重复。我不这么认为,因为我相信所有合适的 .dll 都在正确的位置。我不知道为什么它会毫无错误地编织其他 python 代码。我不知道为什么它会在块中绘制 pythod 代码。它只是不会用 python 图编织任何代码。我感谢链接,但我想我会放弃。

标签: python anaconda rstudio r-markdown knitr


【解决方案1】:

我在这里找到了 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
```

【讨论】:

    【解决方案2】:

    我能够通过一些修改运行您的代码。我将这些块分开以进行错误检查。你需要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
    ```
    

    【讨论】:

    • 感谢布莱恩的努力。我仍然无法让它工作。我能够在其他机器上进行测试,但仍然没有运气。然后我找到了答案。见下文。
    【解决方案3】:

    在您的导入库中,您必须安装 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
    

    【讨论】:

    • Bryan,我试过了,但还是无法编织。在您提出建议之前,我无法导入 PyQt5。我现在可以。仍然没有运气。请您复制我上面的原始代码,看看您是否可以将文档编织成html?
    猜你喜欢
    • 2011-01-24
    • 2021-08-14
    • 2021-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 2021-08-29
    相关资源
    最近更新 更多