2016-03-25 32 views
3

Weiter von meiner vorherigen Frage 'create vectorplot from velocity dataset'. Ich habe noch 2 Frage, wie man die Figur wie folgt aussehen lässt:Wie interpoliere Region auf Vektorplot?

1) Wie die Region interpolieren? Ich habe versucht, interpolate = TRUE verwendet, aber nicht funktioniert.
2) Wie das Pfeilsymbol mit der gleichen Länge definieren (es ist auf den Pfeil zeigt nur bedeuten, die Geschwindigkeitsrichtung)

Hier habe meine Daten uv.nc und Syntax ich geschrieben:

library (raster) 
flname <- 'uv.nc' 
u <- raster(flname, varname = 'U') 
v <- raster(flname, varname = 'V') 
uv <- stack(u,v) 
s <- sqrt(u^2 + v^2) 

library(rasterVis) 
jet <- colorRampPalette(c('#00007F', 'blue', '#007FFF', 'cyan','#7FFF7F', 'yellow', '#FF7F00', 'red', '#7F0000')) 
range = seq(0, 0.5, 0.05) 
vectorplot(uv, isField = 'dXY', interpolate = TRUE, col.regions = jet, region=s, length=0.05) 

enter image description here

+0

Bitte bearbeiten Sie Ihren Beitrag und machen Sie es ein vollständiges Beispiel - bereit zum Kopieren, Einfügen und Ausführen in der R-Umgebung (einschließlich 'Bibliothek' Anrufe, 'Download, Datei' etc.). Ich schätze, dass nicht viele Leute Lust haben, hier Puzzleteile zusammenzusetzen, um deine Figur zu rekonstruieren. – lukeA

+0

Natürlich, hier vervollständige ich bereits meinen Code ... basierend auf meinem Code das Ergebnis ein bisschen anders mit dieser Figur (oben) –

Antwort

2

(erste Frage) Das interpolate Argument benötigt die Funktion, die von levelplot aufgerufen wird (intern von vectorplot verwendet, um den Hintergrund zu rendern). Dies funktioniert jedoch nicht direkt mit der aktuellen Version rasterVis. Sie können diesen Trick versuchen:

levelplot(s, 
      panel = panel.levelplot.raster, 
      interpolate = TRUE, 
      margin = FALSE) + 
vectorplot(uv, isField = 'dXY', region = FALSE) 

(Zweite Frage) Die Länge der Pfeile durch die Daten bestimmt wird, da Sie dXY = TRUE verwenden. Daher sollten Sie Ihre Daten ändern, um Vektoren mit der gleichen Größe zu erhalten.

uv0 <- uv/s 
vectorplot(uv0, isField = 'dXY', region = s) 
+0

Hallo @Oscar Perpiñán. Für die erste Frage, die immer noch keine Figur wie oben erzeugt, gab mir der Interpolate-Befehl keine gute Regioninterpolation. –

+0

Dann sollten Sie die räumliche Auflösung Ihres 'Raster'-Objekts erhöhen. Sie können versuchen, die Funktionen 'disaggregate',' resample' oder 'interpolate' aus dem Paket' raster' zu verwenden. –

+0

Die räumliche Auflösung ist ziemlich groß (1/12 Grad ~ 9 km Quadrat), ich erstelle die obige Abbildung auf ArcGIS 9.3. –