Ich stieß auf das gleiche Problem. Dies liegt daran, dass Grundkarte intern mit projizierten Koordinaten arbeitet - mit Ausnahme der Projektion cyl
; Lesen here:
eine Grundkarte Klasseninstanz mit den Argumenten lon Aufruf wird lat lon/LAT (in Grad) konvertieren, x/y Koordinaten Kartenprojektion (in Metern). [
Für zylindrische äquidistante Projektion (Zyl) tut dies nichts (d. H. X, y == lon, lat). die Nebenkarte Grenzen zuerst zu extrahieren, wandeln sie in geographischen Koordinaten, und schließlich wieder Projekt sie wieder auf die Hauptkarte
Um die Markierung richtig funktioniert, die Sie benötigen.
schrieb ich eine kleine Ersatzfunktion für mark_inset
, dass die Basemap Objekte zusätzlich benötigt m
& m2
beiden Karten (Haupt- und Nebenbild):
def mark_inset(ax, ax2, m, m2, loc1=(1, 2), loc2=(3, 4), **kwargs):
"""
Patched mark_inset to work with Basemap.
Reason: Basemap converts Geographic (lon/lat) to Map Projection (x/y) coordinates
Additionally: set connector locations separately for both axes:
loc1 & loc2: tuple defining start and end-locations of connector 1 & 2
"""
# Doesn't work for Basemap
# rect = TransformedBbox(inset_axes.viewLim, parent_axes.transData)
# axzoom_geoLims = np.array(m2(*ax2.viewLim._points.T, inverse=True))
axzoom_geoLims = m2(ax2.get_xlim(), ax2.get_ylim(), inverse=True)
rect = TransformedBbox(Bbox(np.array(m(*axzoom_geoLims)).T), ax.transData)
pp = BboxPatch(rect, fill=False, **kwargs)
ax.add_patch(pp)
p1 = BboxConnector(ax2.bbox, rect, loc1=loc1[0], loc2=loc1[1], **kwargs)
ax2.add_patch(p1)
p1.set_clip_on(False)
p2 = BboxConnector(ax2.bbox, rect, loc1=loc2[0], loc2=loc2[1], **kwargs)
ax2.add_patch(p2)
p2.set_clip_on(False)
return pp, p1, p2
Hinweis: die Funktion auf another answer basiert, die unterschiedlich einstellen können Start- und Endpositionen für die Anschlüsse. Daher können Sie das auch mit dieser Funktion tun.
Hinweis 2: das ax2
Objekt muss nicht notwendigerweise ein Inset Objekt sein - es kann eine beliebige Achse Objekt sein (beispielsweise auch ein subplot). Daher wäre ein besserer Name für die Funktion mark_geo_zoom
. ;-)