Question

Je suis en train de créer un terrain d'intensité de couleur heatmap ou à l'aide des données d'un tableau numpy, en utilisant rpy2 et treillis. J'utilise python 2.6.2, R 2.10.1, rpy2 2.1.9, pas sûr version du réseau. Je l'ai obtenu il fonctionne parfaitement, sauf que je dois modifier le réglage du réseau par défaut pour la rampe de couleur utilisée pour tracer les niveaux de la variable correspondante (z). Plus précisément, je veux en niveaux de gris au lieu de la rampe par défaut magenta-cyan. Voici le code pour générer une trame de données factice et créer la levelplot en niveaux de gris dans la vanille 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

Avec rpy2, je ne peux pas régler l'argument col.regions. Selon la documentation, rpy2 est censé convertir tout. caractères dans les arguments de fonction à _. Cela ne semble pas fonctionner, cependant, puisque l'utilisation des résultats de col_regions dans l'argument étant ignoré. Voici le code python qui produit le levelplot, mais sans en niveaux de gris:

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

Quelqu'un sait comment utiliser des arguments de fonction treillis avec. en eux rpy2?

Était-ce utile?

La solution

Vous devez spécifier le mappage des arguments manuellement:

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)

Et aussi vérifier ceci: http://rpy.sourceforge.net /rpy2/doc-2.2/html/robjects_functions.html

  

Il est important de comprendre que la   traduction est faite par l'inspection de la   signature de la fonction de R, et que   on ne peut guère deviner de la R   ellipsis « ... » à chaque fois présent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top