Wie ändere ich die matplotlib ist Nebenhandlung Projektion einer vorhandenen Achse?
Ich versuche zu konstruieren, die eine einfache Funktion, die eine Nebenhandlung Instanz (matplotlib.axes._subplots.AxesSubplot
) und verwandelt seine Projektion auf eine andere Projektion, zum Beispiel, einer der cartopy.crs.CRS
Projektionen.
Die Idee sieht in etwa so
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
def make_ax_map(ax, projection=ccrs.PlateCarree()):
# set ax projection to the specified projection
...
# other fancy formatting
ax2.coastlines()
...
# Create a grid of plots
fig, (ax1, ax2) = plt.subplots(ncols=2)
# the first subplot remains unchanged
ax1.plot(np.random.rand(10))
# the second one gets another projection
make_ax_map(ax2)
Natürlich, kann ich einfach fig.add_subplot()
Funktion:
fig = plt.figure(figsize=(10,5))
ax1 = fig.add_subplot(121)
ax1.plot(np.random.rand(10))
ax2 = fig.add_subplot(122,projection=ccrs.PlateCarree())
ax2.coastlines()
aber ich Frage mich, ob es eine richtige matplotlib
Methode zum ändern einer Nebenhandlung Achse Projektion nach es definiert wurde. Lesen matplotlib API nicht helfen, leider.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht ändern Sie die Projektion einer vorhandenen Achsen, der Grund wird unten gegeben. Jedoch die Lösung auf Ihre zugrunde liegende problem ist einfach zu verwenden, die
subplot_kw
argumentplt.subplots()
beschrieben in der matplotlib Dokumentation hier. Zum Beispiel, wenn Sie wollten, dass alle Ihre Geschichten haben diecartopy.crs.PlateCarree
Projektion, die Sie tun könntenBezug auf die eigentliche Frage, die Angabe einer Projektion, wenn Sie erstellen ein-Achsen-set bestimmt, die Achsen Klasse, die Sie bekommen, das ist unterschiedlich für jede Projektion geben. Zum Beispiel
Dieser code druckt die folgenden
Beachten Sie, wie jede Achse ist tatsächlich eine Instanz einer anderen Klasse.
projection
Schlüsselwort bestimmt Klasse für alle Nebenhandlungen auf einmal, so dass es keine Möglichkeit gibt, an mehreren Projektionen insubplot_kw
? E. g.projection='polar'
für die erste Spalte und dieprojection=ccrs.PlateCarree()
für die zweite Spalte in einer Nebenhandlung angelegt werden, die vonplt.subplots(ncols=2)
?subplot_kw
sind an jeder Achse, so dass ich don ' T glaube, Sie können tun, was Sie beschreiben. Diesubplots
Funktion ist eine bequeme wrapper gerecht zu werden, die für die grundlegenden use-case -, wenn Sie etwas brauchen, mehr könnten Sie schreiben Ihre eigenen wrapper-Funktion mitadd_subplot
oder ähnliches.axes_class
Schlüsselwort inImageGrid
(oderAxesGrid
). Es ist ein Beispiel in cartopy Galerie. Es gab auch eine PR zu cartopy (nicht akzeptiert, obwohl), die verwendet werden können, um eine benutzerdefinierteGeoAxesGrid
Klasse.folgenden die Antwort auf diese Frage :
Fand ich einen hack ändern Sie die Projektion der Axt nach dem anlegen, das scheint zu funktionieren, zumindest in dem einfachen Beispiel unten, aber ich habe keine Ahnung, ob diese Lösung ist der beste Weg,