オーバーラップする 2 つの軸セットを描画しました。1 つはもう 1 つのズーム バージョンです。ズームされた軸の角と、それが大きな軸で表す長方形の角の間に線を引きたいと思います。ただ、描いている線が少しずれています。これを簡単な例に要約しようとしました:
import cartopy.crs as ccrs
import matplotlib.pyplot as plt
# Create a large figure:
fig = plt.figure(figsize=(10, 10))
# Add an axes set and draw coastlines:
ax1 = plt.axes([0.01, 0.49, 0.8, 0.5], projection=ccrs.PlateCarree())
ax1.set_global()
ax1.coastlines()
# Add a second axes set (overlaps first) and draw coastlines:
ax2 = plt.axes([0.45, 0.35, 0.4, 0.3], projection=ccrs.PlateCarree())
ax2.set_extent([-44, 45, -15, 45], crs=ccrs.PlateCarree())
ax2.coastlines()
# Draw the rectangular extent of the second plot on the first:
x = [-44, 45, 45, -44, -44]
y = [-15, -15, 45, 45, -15]
ax1.fill(x, y, transform=ccrs.PlateCarree(), color='#0323E4', alpha=0.5)
ax1.plot(x, y, transform=ccrs.PlateCarree(), marker='o')
# Now try and draw a line from the bottom left corner of the second axes set
# to the bottom left corner of the extent rectangle in the first plot:
transFigure = fig.transFigure.inverted()
coord1 = transFigure.transform(ax2.transAxes.transform([0, 0]))
coord2 = transFigure.transform(ax1.transData.transform([-45, -15]))
line = plt.Line2D((coord1[0], coord2[0]), (coord1[1], coord2[1]), transform=fig.transFigure)
fig.lines.append(line)
plt.show()
次の出力を使用します。
これは、を呼び出すときに軸の形状/アスペクトを明示的に定義しているためだと思います。このplt.axes()
形状は、マップが正しく見えるように設計されたアスペクト比で描画されるため、カートピー軸の形状と一致しません。への呼び出しで軸の形状を微調整しplt.axes()
て、縦横比がマップの縦横比と一致し、線が期待どおりの場所に描画されるようにすることはできますが、これは簡単ではありません。座標変換でこれを説明できる方法はありますか?