Matplotlib Cartopy纵横比匹配线子地块到地理地图

Matplotlib Cartopy纵横比匹配线子地块到地理地图,matplotlib,cartopy,Matplotlib,Cartopy,我有两个情节;地理地图和线图 我希望线条图的高度与地理地图的高度相匹配。有没有办法从cartopy GeoAxis获得纵横比?如果执行ax1.get_aspect(),它将返回“equal” import xarray as xr import cartopy.crs as ccrs import matplotlib.pyplot as plt ds = xr.tutorial.open_dataset('air_temperature')['air'].isel(time=0) plt.

我有两个情节;地理地图和线图

我希望线条图的高度与地理地图的高度相匹配。有没有办法从cartopy GeoAxis获得纵横比?如果执行ax1.get_aspect(),它将返回“equal”

import xarray as xr
import cartopy.crs as ccrs
import matplotlib.pyplot as plt

ds = xr.tutorial.open_dataset('air_temperature')['air'].isel(time=0)

plt.figure(figsize=(15, 10))
ax1 = plt.subplot(121, projection=ccrs.PlateCarree())
ds.plot(transform=ccrs.PlateCarree(), ax=ax1, add_colorbar=False)

ax2 = plt.subplot(122)
ax2.plot([1, 2, 3], [5, 6, 7])
最终编辑: 我误读了;除法器和斧头是有区别的。我不知道你可以从分割器中生成多个轴

import xarray as xr
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable

fig = plt.figure(figsize=(13, 8))
ax1 = fig.add_subplot(111, projection=ccrs.PlateCarree())
img = xr.tutorial.open_dataset('air_temperature')['air'].isel(time=0).plot(
    x='lon', y='lat', ax=ax1, transform=ccrs.PlateCarree(), add_colorbar=False)
ax1.coastlines()
ax1.set_title('ax1')

divider = make_axes_locatable(ax1)
ax2 = divider.new_horizontal(size="10%", pad=0.1, axes_class=plt.Axes)
fig.add_axes(ax2)
plt.colorbar(img, cax=ax2)

ax3 = divider.new_horizontal(size="100%", pad=1, axes_class=plt.Axes)
fig.add_axes(ax3)
ax3.plot([1, 2, 3], [5, 6, 7])

我会使用
mpl\u工具包。axes\u grid1。使\u axes\u可定位
类似于在色条中的操作方式。不同之处在于,您将为绘图创建轴,而不是为颜色条创建轴

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable


fig = plt.figure(figsize=(13, 8))
ax1 = fig.add_subplot(111, projection=ccrs.PlateCarree())
ax1.coastlines()

divider = make_axes_locatable(ax1)
ax2 = divider.new_horizontal(size="100%", pad=0.4, axes_class=plt.Axes)
fig.add_axes(ax2)
ax2.plot([1, 2, 3], [5, 6, 7])

plt.show()

我会使用
mpl\u工具包。axes\u grid1。使\u axes\u可定位
类似于在色条中的操作方式。不同之处在于,您将为绘图创建轴,而不是为颜色条创建轴

import cartopy.crs as ccrs
import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import make_axes_locatable


fig = plt.figure(figsize=(13, 8))
ax1 = fig.add_subplot(111, projection=ccrs.PlateCarree())
ax1.coastlines()

divider = make_axes_locatable(ax1)
ax2 = divider.new_horizontal(size="100%", pad=0.4, axes_class=plt.Axes)
fig.add_axes(ax2)
ax2.plot([1, 2, 3], [5, 6, 7])

plt.show()

最简单的方法是使用smth,比如
figsize=(15,4)
并播放最后一个数字,直到它合适为止。不幸的是,我需要将其全部自动化;因此,我想找到地图的实际纵横比,并重新调整线条的纵横比。最简单的方法是使用smth,如
figsize=(15,4)
并播放最后一个数字,直到它合适为止。不幸的是,我需要将其全部自动化;所以我想找到地图的实际纵横比并重新调整线条的纵横比。哇!好主意!如果您有4个子图,或者只是地图的一个颜色条,该怎么办?它似乎不允许连续添加fig=plt.fig(figsize=(13,8))ax1=fig.add_子地块(111,投影=ccrs.PlateCarree())ax1.Coasines()分割线=使轴可定位(ax1)ax2=分割线。new_horizontal(size=“100%”,pad=0.4,轴类=plt.axs)fig.add_轴(ax2)ax2.绘图([1,2,3],[5,6,7])分割线=使轴可定位(ax2)ax3=分割线。new_horizontal(size=“100%”,pad=0.4,axes\u class=plt.axes)fig.add\u axes(ax3)ax3.plt([1,2,3],[5,6,7])plt.show()``不,您仍然需要使用相同的分隔符,而不是创建一个新的分隔符。如果我有4个子图,两个带有色条的贴图和两个线条图;我不认为这个方法有效。我想不出它不起作用的原因,所以试试看会发生什么。对不起,我的意思是,是的,我们可以在多个子地块上使用这个方法;然而,如果我们使用这个make_axes_locatable方法添加了一个颜色条,我们就不能在没有时髦行为的情况下添加相同的纵横比线条图。哇!好主意!如果您有4个子图,或者只是地图的一个颜色条,该怎么办?它似乎不允许连续添加fig=plt.fig(figsize=(13,8))ax1=fig.add_子地块(111,投影=ccrs.PlateCarree())ax1.Coasines()分割线=使轴可定位(ax1)ax2=分割线。new_horizontal(size=“100%”,pad=0.4,轴类=plt.axs)fig.add_轴(ax2)ax2.绘图([1,2,3],[5,6,7])分割线=使轴可定位(ax2)ax3=分割线。new_horizontal(size=“100%”,pad=0.4,axes\u class=plt.axes)fig.add\u axes(ax3)ax3.plt([1,2,3],[5,6,7])plt.show()``不,您仍然需要使用相同的分隔符,而不是创建一个新的分隔符。如果我有4个子图,两个带有色条的贴图和两个线条图;我不认为这个方法有效。我想不出它不起作用的原因,所以试试看会发生什么。对不起,我的意思是,是的,我们可以在多个子地块上使用这个方法;但是,如果我们使用这个make_axes_locatable方法添加了一个颜色条,那么如果没有时髦的行为,我们就无法添加相同的纵横比线图。