【发布时间】:2011-06-12 13:00:55
【问题描述】:
我正在尝试使用 numpy 数组中的数据,使用 rpy2 和 lattice 创建热图或颜色强度图。我正在使用 python 2.6.2、R 2.10.1、rpy2 2.1.9,不确定哪个版本的 lattice。我已经让它工作得很好,除了我需要修改用于绘制相关变量 (z) 水平的色带的默认点阵设置。具体来说,我想要灰度而不是洋红色默认渐变。这是生成虚拟数据框并在 vanilla R 中创建灰度级别图的代码:
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.regions 参数。根据文档, rpy2 应该转换任何 . _ 的函数参数中的字符。但是,这似乎不起作用,因为使用 col_regions 会导致参数被忽略。这是产生水平图的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
有谁知道如何使用带有 .在 rpy2 中?
【问题讨论】:
-
“根据文档,rpy2 应该将函数参数中的任何 . 字符转换为 _ 。”。如果是这种情况,这是一个疏忽,应该予以纠正。你能指出文档中的确切位置吗?
-
@lgautier:我在第二段中看到了类似 rpy.sourceforge.net/rpy2/doc-2.2/html/robjects_functions.html 的短语(紧接在第一个代码示例之后),但我认为 tagshell 将单点的语义解释为参数的一部分名称与 3 个点组的语义含义。