【问题标题】:R Markdown: How can I make RStudio display Python plots inline instead of in new window?R Markdown:如何使 RStudio 内联而不是在新窗口中显示 Python 图?
【发布时间】:2018-10-25 10:18:59
【问题描述】:

所以,我最后一直在广泛使用 R Markdown,我对它的功能非常满意。

但是,我在使用 python 绘图时遇到了问题。我有一大段 python 代码,我在 python 中绘制多个数字。

当我使用 R 执行此操作时,RStudio 将内联并排显示此块中生成的所有图。

不幸的是,当对一段 python 代码执行相同操作时,RStudio 会打开一个新窗口,在其中显示绘图,然后代码执行会暂停,直到我关闭该窗口,然后它会绘制下一个图,我必须再次关闭它,等等。

是否有可能强制 RStudio 将数字内联,然后继续执行代码? 提前感谢您的帮助!

【问题讨论】:

  • 值得我赏金的问题。
  • 您能否发布一些示例 Python 代码来生成相关情节?
  • 这是 python 行为,与 RStudio IDE 没有直接关系。我假设您使用的是matplotlib.pyplot,它使用Qt 进行绘制,结果就是弹出窗口中出现的内容。您可以阅读 herehere 了解阻塞行为以及解决此问题的方法。

标签: python r rstudio r-markdown


【解决方案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")
```

在没有任何进程中断的情况下产生以下内容:

来源matplotlib.org

注意根据release notes for RStudio v1.2.679-1 Preview,此版本将显示 Python 块发出的 matplotlib 图。

更新

使用上面提到的最新预览版本,更新块以使用 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 发行版,您可能会遇到由于缺少路径/环境变量的问题而无法从 RStudio 中找到 Qt 的问题。

错误将类似于:

此应用程序无法启动,因为它无法在“”中找到或加载 Qt 平台插件“windows”,重新安装该应用程序可能会解决此问题。

快速解决方法是将以下内容添加到 python 块中以设置环境变量。

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

/path/to 替换为 Anaconda 发行版的相关位置。

【讨论】:

  • 您好,感谢您的回答!这正是我现在正在做的事情,除了你使用knitr::include_graphics 的方法之外,我使用的是Output image: *new line + indent* ![output](pyplot.png),这会使图像看起来更小,如果绘制的图像很大,这很有用。像这样,您可以显示许多图像并保持报告的可读性。
  • @Michael 您认为凯文的回答是否足以回答您的问题?如果可以的话,会给他赏金(我觉得不错)
  • 通常我认为确实如此,但不幸的是我无法重现他的最小示例。也许是因为我使用的是 Anaconda python?我总是收到以下弹出错误消息:“此应用程序无法启动,因为它无法在“”中找到或加载 Qt 平台插件“windows”,重新安装应用程序可能会解决此问题。” (我已经检查了 Qt 是否安装在我的 Anaconda 发行版上)。
  • @Michael,该错误是由于在您的路径中找不到 Qt 引起的(与 Windows 上的 Anaconda 安装有关)。我会在我的回答中添加一个注释。
  • @Michael 我遇到了完全相同的问题,“此应用程序无法启动,因为 .... 应用程序可能会解决此问题。”问题。每当我用 python 块编织一个 .rmd 文件时,就会发生这种情况。我可能会在帖子中标记您或以某种方式向您发送消息。它会很有用。此外,凯文似乎发布了一个潜在的解决方案。一定要试试!
猜你喜欢
  • 2016-09-12
  • 1970-01-01
  • 2017-04-02
  • 1970-01-01
  • 2019-08-20
  • 2018-05-04
  • 2010-10-25
  • 2018-03-14
  • 2016-11-21
相关资源
最近更新 更多