2013-05-23 13 views
6

Ich zeichne einige Oberflächen in R unter Verwendung des Gitterpakets. Ich kann keine Möglichkeit finden, die Farben der Oberfläche zu wählen. Hier ein Beispiel:Manuelles Definieren der Farben eines Drahtmodells

enter image description here

Hier ist ein Beispiel dafür, wie ich plotten jeweils:

theseCol=heat.colors(150) 
mm=paste("WB numbers where present\n(",nstoch," sims)",sep="") 
WBnumbers=wbPrev_series 
rownames(WBnumbers)=KList 
colnames(WBnumbers)=iMwbList 
wireframe(WBnumbers, zlim=c(0,max(wbPrev_series,na.rm=TRUE)), colorkey=FALSE, 
        col.regions=theseCol, scales = list(arrows = FALSE), drape = TRUE, 
        main=mm, zlab="", xlab="K", ylab="iMwb") 

Ich würde für die erste Oberfläche mag sein, wie es ist, aber für die anderen zu sein, nicht durch ihre z-Ebenen, sondern durch die z-Ebenen der 1. Oberfläche. Ich habe mehrere Dinge ausprobiert, aber wireframe akzeptiert immer die Farben, die ich als mögliche Bereiche für die aktuelle Variable gebe.

Wie auch immer könnte dies getan werden? Danke

+2

Leider sieht dies gottähnlich schwer zu erreichen. Das Rendern von 3-D-Objekten ist der eine Teil des Pakets, das eine C-Level-Funktion verwendet ("wireframePanelCalculations", in "gridPackageSource/src/threeDplot.c"). 'wireframePanelCalculations' wird (mit' .Call() ') in der Funktion' gittet ::: panel.3dwire' aufgerufen, und es ruft wiederum für jede Facette des Objekts eine zuvor definierte R-Funktion 'wirePolygon' auf Oberfläche. Alles, was zwischen den C- und R-Funktionen übertragen wird, sind die Z-Werte und der Vektor der Farbstufen, und es gibt einfach keine Möglichkeit, dies zu umgehen. Schade! –

Antwort

2

Hier ist die Antwort, die Dave W. vor einigen Jahren auf der R-Hilfe-Mailingliste veröffentlicht hat. Sie können wahrscheinlich den gesamten Thread google.

Von: David Winsemius die Beratung in der Hilfe (wirefrane) Nach Sie um Rat erneut an dem
levelplot Abschnitt suchen müssen: eine richtige Spezifikation
und folgen Sie den entsprechenden Links in den Hilfeseite colorkey. Ob Ihre Daten
eine richtige Eingabe für Drahtgitter ist, kann nicht aus der enthaltenen
Informationen bestimmt werden, obwohl ich vermute, dass Ihr gemeldeter Erfolg es vorschlägt.

Dies ist eine nicht getestete Wild assed Vermutung
nach der Lektüre des Materials I zu spitz (da es nichts zu testen war):

wireframe(data.m,aspect = c(0.3), shade=TRUE, screen = list(z = 0, x = 
-45), 
    light.source = c(0,0,10), distance = 
0.2,zlab="Freq",xlab="base",ylab="Fragment", 
    col=level.colors(x, at = do.breaks(range(data.m), 30), 
        col.regions = colorRampPalette(c("red", "white", 
"blue")(30)) 
     ) 

EDIT: Per Joshs Anfrage, spielte ich ein wenig herum.

wireframe(dmat,drape=TRUE,col='black',col.regions = colorRampPalette(c("red", "white", "blue"))(30)) 

, die die „drapieren“ Farben setzt aber nicht die Rasterlinien selbst: Im Folgenden wird eine Farbschattierung (drapieren) gelten. Es ist eine verflixte Schande, dass wireframe nicht par(new=TRUE) respektiert, denn wenn wir es getan hätten, könnten wir die Datenmatrix in z-Bereiche schneiden und eine Farbe auf einmal überstreichen.

Ich werde mein "Archiv" von alten Experimenten w/R-Grafiken überprüfen müssen, wenn ich nach Hause komme, aber ich glaube, dass ich das scatterplot3d Paket verwendet habe, um datenabhängige Rasterfarben zu erhalten.

+0

Wahrscheinlich nicht wert, ungetestete Wild-Assessed-Vermutungen zu posten, die, wenn ich es richtig verstanden habe, später im Thread als nicht ausgearbeitet gemeldet wurden;). Wenn es tatsächlich irgendwie funktioniert, könntest du uns zeigen wie? –

+0

Hallo Leute, es tut mir leid zu sagen, aber es funktioniert nicht. Ich bin jetzt davon weggegangen, weil es wie eine unmögliche Aufgabe klingt. Danke für die Antworten. – lourencoj

Verwandte Themen