Domanda

Sto cercando di creare un grafico heatmap o il colore intensità utilizzando i dati da un array NumPy, utilizzando rpy2 e lattice. Sto utilizzando Python 2.6.2, R 2.10.1, rpy2 2.1.9, non è sicuro che la versione di lattice. Ho ottenuto che funziona perfettamente, solo che ho bisogno di modificare l'impostazione predefinita reticolo per la rampa colore utilizzato per tracciare i livelli della variabile rilevante (z). In particolare, voglio in scala di grigi al posto della rampa di default magenta-ciano. Ecco il codice per generare un dataframe manichino e creare il levelplot in scala di grigi in vaniglia 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, non posso impostare l'argomento col.regions. Secondo la documentazione, rpy2 dovrebbe convertire qualsiasi. personaggi in argomenti della funzione a _. Ciò non sembra funzionare, però, dal momento che utilizzando col_regions risultati nell'argomento essere ignorato. Ecco il codice python che produce il levelplot, ma senza scala di grigi:

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

Qualcuno sa come utilizzare gli argomenti delle funzioni reticolo con un. in loro in rpy2?

È stato utile?

Soluzione

È necessario specificare la mappatura argomento 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)

E verificare anche questo: http://rpy.sourceforge.net /rpy2/doc-2.2/html/robjects_functions.html

E 'importante capire che il traduzione è fatta controllando la firma della funzione R, e che non molto può essere intuito dal R puntini di sospensione ‘...’ ogni volta presente.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top