我正在尝试使用rpy2和晶格使用来自numpy阵列的数据创建热图或颜色强度图。我正在使用Python 2.6.2,R 2.10.1,RPY2 2.1.9,不确定哪个版本的晶格。我的工作正常,除了我需要修改用于绘制相关变量(Z)级别的颜色坡道的默认晶格设置。具体来说,我想要灰度而不是洋红色 - cyan默认坡道。这是生成虚拟数据框的代码,并在Vanilla R中创建Grayscale LevelPlot:

library(lattice)

x <- rep(seq(1,10), each=10)
y <- rep(seq(1,10), 10)
z <- abs(rnorm(100))
z <- z/max(z)
df <- data.frame(x=x, y=y, z=z)

grayvector <- gray(seq(0,1,1/100))

foo <- levelplot(z ~ x * y, data=df, col.regions = grayvector)
print foo

使用RPY2,我无法设置Col.区域的参数。根据文档,RPY2应该转换任何内容。函数的字符参数为_。但是,这似乎不起作用,因为使用col_rigions会导致参数被忽略。这是产生levelplot的Python代码,但没有灰度:

from __future__ import division
import rpy2.robjects as ro
from rpy2.robjects.packages import importr
r = ro.r
lattice = importr("lattice")

grayvector = r.gray( r.seq(0, 1, 1/100))   
x = r.rep(r.seq(1,10), each=10)
y = r.rep(r.seq(1,10), 10)
z = r.abs(r.rnorm(100))

df = {'x': x, 'y' :y, 'z':z}
df = ro.DataFrame(foo)

formula = ro.Formula('z ~ x * y')
formula.getenvironment()['z'] = df.rx2('z')
formula.getenvironment()['y'] = df.rx2('y')
formula.getenvironment()['z'] = df.rx2('z')

foo = lattice.levelplot(formula, data=df, col_regions = grayvector)
print foo

有人知道如何使用a lattice函数参数。在rpy2中?

有帮助吗?

解决方案

您需要手动指定参数映射:

from rpy2.robjects.functions import SignatureTranslatedFunction
lattice = importr("lattice")
lattice.levelplot = SignatureTranslatedFunction(lattice.levelplot,
                                                init_prm_translate={'col_regions': 'col.regions'})
foo = lattice.levelplot(formula, data=df, col_regions=grayvector)

还检查一下: http://rpy.sourceforge.net/rpy2/doc-2.2/html/robjects_functions.html

重要的是要了解翻译是通过检查R函数的签名来完成的,并且每当存在时,从R省略者'...'可以猜测不多。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top