Ich arbeite mit einigen Wetterdaten, um Konturlinien auf der Grundkarte mit Matplotlib zu plotten. Die Daten, die ich verwendet habe (x, y und Daten) werden hier hochgeladen http://www.mediafire.com/download/0epjjdm8auit611/mslp.txt hier http://www.mediafire.com/download/1dn6p8nw96h2mmd/xlong.txt und hier http://www.mediafire.com/download/31suzsz6j7u2bgz/xlat.txt. Der Arbeitsbeispielcode ist unter: -Wie man Kontur/Pfad innerhalb von ploygon auf Grundkarte mit Matplotlib entfernen?
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
m = Basemap(projection='merc', llcrnrlat=7, urcrnrlat=40,
llcrnrlon=68, urcrnrlon=110, resolution='l')
x = np.loadtxt('xlong.txt', delimiter=',')
y = np.loadtxt('xlat.txt', delimiter=',')
Z = np.loadtxt('mslp.txt', delimiter=',')
x, y = m(x, y)
CS = plt.contour(x, y, Z, colors='b')
plt.show()
Der obige Code gibt mir die folgende Handlung ...
Das Grundstück ist absolut OK. Aber ich möchte Konturlinien in einem bestimmten Bereich verstecken/entfernen. Also habe ich ein Polygon über eine Grundkarte gezeichnet und versucht, Daten unter dem Polygon zu verstecken. Der Code, den ich verwendet habe, ist wie folgt: -
from mpl_toolkits.basemap import Basemap
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.patches import Polygon
def draw_screen_poly(lats, lons, m):
x, y = m(lons, lats)
xy = zip(x, y)
poly = Polygon(xy, facecolor='red')
plt.gca().add_patch(poly)
lats = [30, 35, 35, 30]
lons = [80, 80, 90, 90]
m = Basemap(projection='merc', llcrnrlat=7, urcrnrlat=40,
llcrnrlon=68, urcrnrlon=110, resolution='l')
x = np.loadtxt('xlong.txt', delimiter=',')
y = np.loadtxt('xlat.txt', delimiter=',')
Z = np.loadtxt('mslp.txt', delimiter=',')
x, y = m(x, y)
CS = plt.contour(x, y, Z, colors='b')
draw_screen_poly(lats, lons, m)
plt.show()
Das resultierende Bild ist lloking wie unten. Wie Sie sehen können, gibt es keinen Effekt von , da darunter keine Daten versteckt sind.
Was ich tun möchte, ist entweder Konturlinien entfernen durch dieses Polygon vorbei oder ausblenden/Clip das Sperrgebiet der Technik der Bildverarbeitung.
Die Lösung, die ich denke, sind: -
1. einig weiße Farbe Polygonbereich anwenden, so dass es die basemap Farbe paßt und Daten verborgen ist (dies bereits in dem obigen Beispiel geschehen ist und nicht funktioniert).
2. Gehen Sie jede Kontur aus der Konturensammlung durch und prüfen Sie, ob sie durch die Polygonregion verläuft. Schließlich entferne es aus der Handlung.
3. Abschließend den Polygonbereich abschneiden.
Mein Verstand geht nicht über die obigen Ideen hinaus. Jede Lösung zur Lösung dieses Problems wird sehr geschätzt.
Vielen Dank. Das hat funktioniert. Allerdings habe ich für jede Konturlinie auch "Clavel". es gibt keine Auswirkung auf Zorder auf 'clabel'. Irgendeine Idee, dieses auch zu entfernen? –
@sundar_ima Es ist wahrscheinlich ein Problem mit etwas in Ihrer Code-Sequenz, da ich Ihr Problem nicht reproduzieren kann. Wie Sie in meinem Beitrag sehen, sind die Beschriftungen unterhalb des Rechtecks. – armatita
Thant hat perfekt funktioniert. Vielen Dank. Akzeptieren Sie Ihre Antwort. –