Pregunta

Estoy intentando crear un gráfico de carta térmica o el color de intensidad a partir de datos de una matriz numpy, utilizando rpy2 y celosía. Estoy usando Python 2.6.2, 2.10.1 R, rpy2 2.1.9, no está seguro de qué versión de celosía. He conseguido que funcione perfectamente, excepto que tengo que modificar la configuración por defecto de celosía para la rampa de color utilizado para representar los niveles de la variable relevante (z). En concreto, quiero escala de grises en lugar de la rampa por defecto magenta-cian. Aquí está el código para generar una trama de datos ficticio y crear la escala de grises en levelplot vainilla 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

Con rpy2, no puedo establecer el argumento col.regions. De acuerdo con la documentación, se supone rpy2 para convertir cualquier. personajes de los argumentos de funciones _. Esto no parece estar funcionando, sin embargo, ya que el uso col_regions resultados en el argumento de ser ignorado. Aquí está el código Python que produce el levelplot, pero sin escala de grises:

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

¿Alguien sabe cómo utilizar argumentos de la función de celosía con una. en ellos en rpy2?

¿Fue útil?

Solución

Es necesario especificar el mapeo argumento manualmente:

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)

Y también comprobar esto: http://rpy.sourceforge.net /rpy2/doc-2.2/html/robjects_functions.html

Es importante entender que la traducción se realiza mediante la inspección de la firma de la función de R, y que no mucho puede ser adivinado por el R puntos suspensivos ‘...’ siempre presente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top