tiempo real matrices graficos graficas graficar ejes coordenadas python matplotlib subplot cartopy

python - real - ¿Cómo cambio la proyección de la trama secundaria de matplotlib de un eje existente?



matplotlib python (1)

No puede cambiar la proyección de un eje existente, la razón se explica a continuación. Sin embargo, la solución a su problema subyacente es simplemente usar el argumento plt.subplots() para plt.subplots() descrito en la documentación de matplotlib here . Por ejemplo, si quisiera que todas sus cartopy.crs.PlateCarree tuvieran la proyección cartopy.crs.PlateCarree , podría hacerlo

import matplotlib.pyplot as plt import cartopy.crs as ccrs # Create a grid of plots fig, (ax1, ax2) = plt.subplots(ncols=2, subplot_kw={''projection'': ccrs.PlateCarree()})

Con respecto a la pregunta real, especificar una proyección al crear un conjunto de ejes determina la clase de ejes que se obtiene, que es diferente para cada tipo de proyección. Por ejemplo

import matplotlib.pyplot as plt import cartopy.crs as ccrs ax1 = plt.subplot(311) ax2 = plt.subplot(312, projection=''polar'') ax3 = plt.subplot(313, projection=ccrs.PlateCarree()) print(type(ax1)) print(type(ax2)) print(type(ax3))

Este código imprimirá lo siguiente

<class ''matplotlib.axes._subplots.AxesSubplot''> <class ''matplotlib.axes._subplots.PolarAxesSubplot''> <class ''cartopy.mpl.geoaxes.GeoAxesSubplot''>

Observe cómo cada eje es en realidad una instancia de una clase diferente.

Estoy tratando de construir una función simple que tome una instancia de matplotlib.axes._subplots.AxesSubplot ( matplotlib.axes._subplots.AxesSubplot ) y transforme su proyección en otra proyección, por ejemplo, en una de las proyecciones cartopy.crs.CRS .

La idea se ve algo como esto.

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)

Por supuesto, solo puedo usar la función fig.add_subplot() :

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()

pero me preguntaba si existe un método matplotlib adecuado para cambiar una proyección de eje de subparcela después de que se haya definido. La lectura de la API matplotlib no ayudó desafortunadamente.