2017-12-05 1 views
0

Ich habe 3 Listen x, y, z mit langen, lat, Wert. Ich versuche, eine Zeichnung mit Konturf und Maskoceans zu konstruieren. Das Ergebnis, das ich bekomme, ist nicht sehr gut in der Nähe der Küste. Der Versuch, Argumente von linspace zu erhöhen, führt zu Speicherfehlern. Gibt es eine Möglichkeit, bessere Ergebnisse in Küstennähe zu erzielen? Mein Code ist wie folgt:Matplotlib maskoceans Ergebnisse mit Hilfe von Listen

import numpy as np 
import scipy.interpolate 
from mpl_toolkits.basemap import Basemap,maskoceans 
import matplotlib.pyplot as plt 

x=[23.027008, 22.774524, 23.010211, 22.346053, 21.264416, 21.261967, 21.31769, 21.478437, 21.406678, 21.453064] 
y=[36.547227, 36.824754, 37.482874, 37.61182, 37.873769, 37.935473, 37.978032, 38.139038, 38.162707, 38.168772] 
z=[155.15, 354.86, 400.2, 47.16, 188.44, 277.01, 375.12, 87.71, 133.85, 123.56] 

map =Basemap(projection='mill', 
      llcrnrlat=36.928942,llcrnrlon=21.696255, 
      urcrnrlat=38.03002,urcrnrlon=23.497298, 
      resolution='i') 
map.drawcoastlines() 

xi, yi = np.linspace(21,24, 100), np.linspace(36, 39, 100) 
xi, yi = np.meshgrid(xi, yi) 

xm,ym=map(xi,yi) 

rbf = scipy.interpolate.Rbf(x, y, z, function='linear') 
zi = rbf(xi, yi) 

zm=maskoceans(xi,yi,zi,resolution='h',grid=1.25) 
map.contourf(xm, ym, zm,cmap='jet') 
map.colorbar() 


plt.show() 

Antwort

1

Das Problem, das Sie haben, ist Ihr interpoliertes Raster für die Feinheiten der Küste nicht fein genug ist, da man in ganz gezoomt Und Sie eine andere Auflösung verwenden für Ihr. Ozeane wie für Ihre Grundkarte, die einige seltsame Artefakte verursacht. Also machte ich drei Änderungen an Ihrem Code:

  • nicht map als Variablennamen verwenden Sie - es ist eine integrierte in Python-Funktion ist und nicht außer Kraft gesetzt werden soll.

    m = Basemap(...

  • die Auflösung des interpolierte Gitters erhöht

    xi, yi = np.linspace(21,24, 1000), np.linspace(36, 39, 1000)

  • Spiel Auflösung der maskoceans mit dem Basemap

    zm=maskoceans(xi,yi,zi,resolution='i',grid=1.25)

+0

Vielen Dank für Ihre Antwort. Mit den Einschränkungen von stackoverflow (Dateien können nicht hochgeladen werden) war die Frage nicht klar genug. weil es vereinfacht wurde. Tatsächlich verwende ich Python (pypyodbc), um eine Verbindung zu einer kleinen Datenbank herzustellen, um Werte zu erhalten. Normalerweise werden je nach Abfrage rund 600 Zeilen mit Longs, Lats und Werten abgerufen. Ich kann linspace Argument nicht sogar zu 300 nicht vergrößern, ohne den Speicher zu verlassen. Die anderen zwei Vorschläge/Korrekturen wurden natürlich angewandt –

+0

Ah, OK, ich fürchte, ich bin nicht sicher, wie man das löst und nicht sicher dort ist viel mehr könnte getan werden, um bessere Auflösung an den Küsten zu bekommen. Eine andere Möglichkeit könnte sein, die Auflösung der Küstenlinien zu verringern? Schwer zu sagen, ohne die Feinheiten Ihres Problems zu kennen. Wenn Sie Probleme mit dem Speicher haben, lohnt es sich, eine weitere Frage mit einigen Details zu öffnen, um zu sehen, ob jemand helfen kann. –

Verwandte Themen