Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R Markdown:如何使RStudio以内联方式而不是在新窗口中显示Python绘图?_Python_R_Rstudio_R Markdown - Fatal编程技术网

R Markdown:如何使RStudio以内联方式而不是在新窗口中显示Python绘图?

R Markdown:如何使RStudio以内联方式而不是在新窗口中显示Python绘图?,python,r,rstudio,r-markdown,Python,R,Rstudio,R Markdown,最后,我广泛使用了R Markdown,我对它的功能非常满意 但是,我对python绘图有一个问题。我有一段python代码,其中我用python绘制了多个图形 当我使用R执行此操作时,RStudio将以内联方式并排显示此块中生成的所有绘图 不幸的是,当对python代码块执行相同操作时,RStudio会打开一个新窗口,在其中显示绘图,然后代码执行会暂停,直到我关闭该窗口,然后它会绘制下一个图形,我必须再次关闭它,等等 是否有可能强制RStudio将图形内联,然后继续执行代码? 提前谢谢你的帮助

最后,我广泛使用了R Markdown,我对它的功能非常满意

但是,我对python绘图有一个问题。我有一段python代码,其中我用python绘制了多个图形

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

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

是否有可能强制RStudio将图形内联,然后继续执行代码?
提前谢谢你的帮助

为了进一步阐述我之前的评论,我将用一个完整的答案详细说明。使用
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")
```
在无任何过程中断的情况下产生以下结果:

资料来源:

N.B.根据for RStudio v1.2.679-1预览,此版本将显示Python块发出的matplotlib图

更新 使用上面提到的最新预览版本,更新区块以使用
pyplot.show
现在将根据需要显示inline

```{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作为python发行版,您可能会遇到一个问题,即由于缺少path/环境变量而无法从RStudio中找到Qt

import os
os.environ['QT_QPA_PLATFORM_PLUGIN_PATH'] = '/path/to/Anaconda3/Library/plugins/platforms'
错误将类似于:

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

快速修复方法是将以下内容添加到python块以设置环境变量

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

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

值得赏金的问题imo。请发布一些生成相关绘图的Python示例代码。这是Python行为,与RStudio IDE没有直接关系。我假设您使用的是
matplotlib.pyplot
,它使用Qt绘制,结果就是弹出窗口中显示的结果。您可以阅读并了解阻塞行为以及解决此问题的方法。您好,谢谢您的回答!这也正是我现在所做的,除了我使用的是
输出图像:*新行+缩进*,而不是您使用
knitr::include_graphics
的方法之外![输出](pyplot.png)
,这会使图像看起来更小,如果打印的图像较大,这会很有用。这样,您可以显示许多图像并保持报告的可读性。@Michael您认为凯文的回答足以回答您的问题吗?如果有(我觉得很好)我会给他赏金一般我认为有,但不幸的是我不能复制他的最小例子。也许是因为我在用蟒蛇?我总是收到以下弹出错误消息:“此应用程序无法启动,因为它无法在“”中找到或加载Qt平台插件“windows”,重新安装该应用程序可能会解决此问题。”(我已检查我的Anaconda发行版上是否安装了Qt)。@Michael,该错误是由于在您的路径中找不到Qt而导致的(与windows上的Anaconda安装相关)。我将在回答中添加一个注释。@Michael我对“此应用程序无法启动,因为……应用程序可能会修复此问题”有完全相同的问题问题。每当我用python块构建一个.rmd文件时,就会发生这种情况。我可能会在帖子中标记你,或者以某种方式向你发送消息。这会很有用。而且,看起来凯文发布了一个潜在的解决方案。我必须尝试一下!