Ich habe Daten zur Visualisierung auf der US-Karte. Ich will keine Farbe auf Ländern außerhalb der Vereinigten Staaten (in Mexiko im Südwesten und Kanada im Nordosten). Wie kann ich diese Bereiche von contourf maskieren? Beachten Sie, dass es nicht wichtig ist, ob diese Zustandsgrenzen gezeichnet werden oder nicht.Wie können Konturfarben außerhalb der kontinentalen USA (innerhalb von Mexiko und Kanada) von der Grundkarte entfernt werden?
Der Code ist:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap, cm, maskoceans
from scipy.interpolate import griddata
np.random.seed(77)
lllat = 24.396308
lllon = -124.848974
urlat = 49.384358
urlon = -66.885444
m = Basemap(llcrnrlat=lllat,
urcrnrlat=urlat,
llcrnrlon=lllon,
urcrnrlon=urlon,
resolution='i', projection='cyl')
m.drawcountries(linewidth=1.0)
m.drawstates(linewidth=1.0, color='lightgray')
m.drawlsmask(land_color='gray',ocean_color="#b0c4de", lakes=True)
#create 100 random latitudes
lats = np.random.randint(low=lllat-1, high=urlat+1, size=1000) + np.random.ranf(size=1000)
#create 100 random longitudes
lons = np.random.randint(low=lllon-1, high=urlon+1, size=1000) + np.random.ranf(size=1000)
#create 100 random values/probabilities
probabilities = np.random.random(size=1000)
#now use meshgrid and contourf to visualize it
mlon, mlat = m(*(lons, lats))
# grid data
numcols, numrows = 1000, 1000
xi = np.linspace(mlon.min(), mlon.max(), numcols)
yi = np.linspace(mlat.min(), mlat.max(), numrows)
xi, yi = np.meshgrid(xi, yi)
# interpolate
x, y, z = mlon, mlat, probabilities
zi = griddata((mlon, mlat), probabilities, (xi, yi), method='nearest', rescale=False)
data = maskoceans(xi, yi, zi)
con = m.contourf(xi, yi, data, cmap=plt.get_cmap('YlOrRd'))
cbar = m.colorbar(con,location='right',pad="3%")
plt.show()
, die folgendes Bild Beachten Sie die Farben, die außerhalb der US-Grenzen produziert, ich möchte, dass sie entfernt werden.
Ich habe versucht, Punkte von Lats und Lons zu entfernen, die nicht in den USA existieren, aber immer noch einige Teile außerhalb der Grenze konturfarben sind.
Ich könnte Wasser mit oceanmask Maske aber konnte diese Punkte in Mexiko und Kanada nicht maskieren.
Hinweis: Es gibt eine Lösung über alle Gitterpunkte auf Schleife und setzen zi-nan für all jene Punkte, die nicht in den USA sind, aber das ist so rechnerisch teuer angesichts meiner tatsächlichen Datengröße, die keine ist Lösung für mich.
Ich dachte, vielleicht könnte ich in grauer Farbe diese Mexiko und Kanada Staaten über die Kontur neu zeichnen, aber ich bin mir nicht sicher, wie. – Ash