将 python 个对象传递给 rpy2 中的 R 函数

Passing python objects to R functions in rpy2

我在使用 Python 2 的 Jupyter 笔记本上工作,想使用 rpy2 绘制热图。

import numpy as np
from rpy2 import robjects
from rpy2.robjects import r, pandas2ri
from rpy2.robjects import Formula, Environment
from rpy2.robjects.vectors import IntVector, FloatVector
from rpy2.robjects.lib import grid
from rpy2.robjects.packages import importr, data
from rpy2.rinterface import RRuntimeError
import warnings


a = np.array([1.5,2.3])
b = np.array([4.2,5.1])
c = np.array([[0.3, 0.6],[0.6, 0.3]])

r.image.plot(a,b,c)

给我错误

AttributeError: 'SignatureTranslatedFunction' object has no attribute 'plot'

如何正确地将参数传递给这个函数?规格:rpy2 2.5.6 与 R3.3.3 和 Python 2.7

这不起作用,因为 image.plot 显然来自包 fields。使用基础 R 的 graphics 库中的 image,例如这个:

import numpy as np
from rpy2.robjects.packages import importr
from rpy2.rinterface import RRuntimeError
import rpy2.robjects.numpy2ri
from IPython.display import Image, display
from rpy2.robjects.lib import grdevices

rpy2.robjects.numpy2ri.activate()
grf = importr('graphics')

a = np.array([1.5,2.3])
b = np.array([4.2,5.1])
c = np.array([[0.3, 0.6],[0.6, 0.3]])

with grdevices.render_to_bytesio(grdevices.png, width=1024, height=896, res=150) as img:
    grf.image(a, b, c)
display(Image(data=img.getvalue(), format='png', embed=True))

给出

要使用 image.plot,您必须 运行

fields = importr('fields')

并将grf.image(a, b, c)替换为fields.image.plot(a, b, c)