2 回答

TA貢獻1847條經驗 獲得超7個贊
您在xyA=(lon,lat). 它與聲明不符coordsA='data'。要獲得正確的值,請執(zhí)行以下步驟:
use_proj = ccrs.Robinson()
xyA = use_proj.transform_point(lon, lat, ccrs.PlateCarree())
# You get xyA=(13151177.842976002, -3208556.0608129553)
并用它來繪制連接補丁:
con = patches.ConnectionPatch(
xyA=xyA,
xyB=(lon,lat),
coordsA='data', coordsB='data', axesA=ax, axesB=ax2, color='r')
情節(jié)將是:

TA貢獻2039條經驗 獲得超8個贊
盡管之前的答案非常有幫助,但它對我來說在略有不同的不同情況下不起作用(使用不同的投影和軸)。不過,我沒有設法找到會破壞它的 MWE,所以我真的不知道問題出在哪里,但如果它也對其他人造成破壞,這里有一個適用于所有情況的版本。
import matplotlib.pyplot as plt
import matplotlib.patches as patches
import cartopy.crs as ccrs
fig = plt.figure()
projA = ccrs.Robinson()
projB = ccrs.Mollweide()
pc = ccrs.PlateCarree()
ax = plt.subplot(projection=projA)
lon,lat = 145,-30
ax.stock_img()
ax.plot(lon,lat, marker='x', color='r', transform=pc)
ax2 = fig.add_axes([0.1,0.06,0.8,0.1], projection=projB)
ax2.stock_img()
ax2.plot(lon,lat, marker='x', color='r', transform=pc)
xyA = projA.transform_point(lon, lat, pc)
xyB = projB.transform_point(lon, lat, pc)
# line between axes
con = patches.ConnectionPatch(
xyA=xyA, xyB=xyB, coordsA=ax.transData, coordsB=ax2.transData, color='r')
fig.add_artist(con)
plt.show()
我知道這不是 100% 與 OP 相關,但它確實回答了標題的問題,因此它更像是對遇到我遇到的相同(未知)問題的其他人的潛在幫助。
添加回答
舉報