Frage

Ich versuche, ein Heatmap- oder Farbintensitätsdiagramm mit Daten aus einem Numpy-Array mit RPY2 und Gitter zu erstellen. Ich verwende Python 2.6.2, R 2.10.1, RPY2 2.1.9, nicht sicher, welche Version von Gitter. Ich habe es perfekt zum Laufen gebracht, außer dass ich die Standardgittereinstellung für die Farbrampe ändern muss, die verwendet wird, um die Ebenen der entsprechenden Variablen (z) zu zeichnen. Insbesondere möchte ich Graustufen anstelle der Magenta-Cyan-Standardrampe. Hier ist der Code zum Generieren eines Dummy -Datenframes und des Erstellens des Graustufenpegelplot in 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

Mit RPY2 kann ich das Argument von Col.regions nicht festlegen. Nach der Dokumentation soll RPY2 alle konvertieren. Zeichen in Funktionsargumenten zu _. Dies scheint jedoch nicht zu funktionieren, da die Verwendung von Col_regions dazu führt, dass das Argument ignoriert wird. Hier ist der Python -Code, der den Levelplot erzeugt, jedoch ohne Graustufen:

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

Weiß jemand, wie man Gitterfunktionsargumente mit a verwendet? in ihnen in RPY2?

War es hilfreich?

Lösung

Sie müssen die Argument Mapping manuell angeben:

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)

Und überprüfen Sie auch das: http://rpy.sourceforge.net/rpy2/doc-2.2/html/robjects_functions.html

Es ist wichtig zu verstehen, dass die Übersetzung durchgeführt wird, indem die Signatur der R -Funktion inspiziert wird und dass nicht viel von der R -Ellipsis erraten werden kann, wenn immer vorhanden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top