rpy2 plot问题(设备没有响应)rpy2.rinterface.NULL

时间:2017-10-31 06:56:19

标签: plot graphics rpy2

Setup: 
1. win10,
2. python3.5/3.6, 
3. R 3.42,
4. rpy2 2.90 or 2.8x
5. Ipython 6.1.0

当我使用rpy2作为rpy2文档时,绘图存在问题:

In [26]: import rpy2.robjects as robjects
...:
...: r = robjects.r
...:
...: x = robjects.IntVector(range(10))
...: y = r.rnorm(10)
...:
...: r.X11()
...:
...: r.layout(r.matrix(robjects.IntVector([1,2,3,2]), nrow=2, ncol=2))
...: r.plot(r.runif(10), y, xlab="runif", ylab="foo/bar", col="red")
...:
Out[26]: rpy2.rinterface.NULL

在绘图后有一个图形,但图形有问题,标题变为:R Graphics:Device3(ACTIVE)(没有响应),然后python崩溃,我需要重新启动它。

because my system language is chinese, the tranlation of the picture title is R Graphics: Device3 (ACTIVE) (not responding)

我尝试了不同版本的rpy2或python,他们也有这个问题。

谁可以帮助我?

1 个答案:

答案 0 :(得分:0)

请尝试以下解决方法,即使在2019年,它似乎也仍然需要。如果在预览中几乎没有显示绘图,或者单击时窗口没有反应: 两次加载绘图,并在两者之间使用r.windows()/ r.X11()/ r.quartz()(根据https://www.statmethods.net/graphs/creating.html->查看多个图形,至少使用图形命令Windows / Unix / Mac-> X11()似乎也可以在Windows上运行)。 然后使用grdevices.dev_off()两次,选择两次之间的等待时间,或者只执行一次,然后根据需要使用隔离的grdevices.dev_off()语句将其关闭。

import time
from rpy2.robjects.packages import importr
from rpy2.robjects import r
from rpy2.robjects.lib import ggplot2
grdevices = importr('grDevices')
rprint = robjects.globalenv.get("print")

pp = ggplot2.ggplot(mtcars) + \
     ggplot2.aes_string(x='wt', y='mpg', col='factor(cyl)') + \
     ggplot2.geom_point() + \
     ggplot2.geom_smooth(ggplot2.aes_string(group = 'cyl'), method = 'lm')

rprint(pp)
r.windows()
rprint(pp)
grdevices.dev_off()

#From here optional, if you want a waiting time
#Elsewise close the plot manually afterwards with grdevices.dev_off()
time.sleep(10)
grdevices.dev_off()

如果窗口仍然崩溃,请执行grdevices.dev_off(),无需强制关闭

替代:完全不显示图,而是保存图片。

grdevices.dev_copy(device = r.png, filename = "plot.png", width = 1000, height = 500)
rprint(pp)
grdevices.dev_off()