【问题标题】:ggplot2 plot function returns NoneType object with rpy2ggplot2 绘图函数使用 rpy2 返回 NoneType 对象
【发布时间】:2020-05-06 21:57:53
【问题描述】:

我有一个使用 rpy2 创建 ggplot2 散点图的简单脚本。但是,该图并未显示。返回的绘图对象是 NoneType。这是脚本:

from rpy2 import robjects
import rpy2.robjects as ro
from rpy2.robjects.lib import grid
from rpy2.robjects.packages import importr, data
import rpy2.robjects.lib.ggplot2 as ggplot2

rprint = robjects.globalenv.find("print")
stats = importr('stats')
grdevices = importr('grDevices')
base = importr('base')
datasets = importr('datasets')
grid.activate()

mtcars = data(datasets).fetch('mtcars')['mtcars']

gp = ggplot2.ggplot(mtcars)    
pp = gp + ggplot2.aes_string(x='wt', y='mpg') + \
     ggplot2.geom_point()
print('type(pp):',type(pp))
fig = pp.plot()
print('type(fig):',type(fig))
pp.plot()

我可以将图形保存为 png 文件,因此大部分代码都可以正常工作。在解决此问题时,我尝试使用多个版本的 rpy2,结果各不相同:

  1. 版本 3.0.1 和 3.0.2 -- 图形闪烁、程序崩溃和绘图对象为 NoneType
  2. 版本 3.0.3 -- 空白画布闪烁、程序崩溃和绘图对象为 NoneType
  3. 版本 3.0.4 和 3.0.5 -- 图形闪烁、程序崩溃和绘图对象为 NoneType
  4. 版本 3.1.0 和 3.2.0 -- 不显示图形,绘图对象为 NoneType
  5. 版本 3.2.1 到 3.2.4 -- rpy2 无法使用 pip 安装

我还阅读了线程 here 并点击了那里建议的链接,但我无法根据我的问题调整建议的操作。

为了完整起见,以下是我使用的环境的详细信息:Python 3.7.5、R 版本 3.6.0、MacOS Catalina 版本 10.15.2。

【问题讨论】:

    标签: r python-3.x macos rpy2 python-ggplot


    【解决方案1】:

    描述“安装失败”的更多细节将有助于猜测 Catalina 发生了什么。在 Github Actions 上,最新的 OSX 是 High Sierra (10.13),安装和测试都在那里工作:https://github.com/rpy2/rpy2/runs/378570566

    否则,您的代码似乎没有使用grdevices(或通过importr() 导入的任何其他R pacakges)。 R 可以使用“静态”图形设备(例如 PNG 文件)或“交互式”图形设备(例如 X11、OSX 上的 Quartz)。 请参阅https://rpy2.github.io/doc/v3.2.x/html/graphics.html#graphical-devices 了解更多信息。

    交互式设备可能需要处理事件循环才能更新(请参阅 https://rpy2.github.io/doc/v3.2.x/html/interactive.html#r-event-loop),虽然不这样做不会导致程序崩溃。

    您可以尝试确定系统上默认打开的图形设备是什么(除非已经有打开的设备 R 将打开默认类型的设备)作为确定问题所在的第一步。

    【讨论】:

    • 非常感谢您的回复,我正在处理它,并将进一步评论结果。到目前为止,使用 grdevices 并没有帮助。另外,我的默认图形设备是 Quartz2。
    猜你喜欢
    • 2019-10-20
    • 2013-02-02
    • 2021-03-12
    • 2019-01-12
    • 1970-01-01
    • 2020-06-04
    • 1970-01-01
    • 2013-06-10
    • 1970-01-01
    相关资源
    最近更新 更多