第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何轉換 matplotlib ConnectionPatch,即用于 Cartopy 投影

如何轉換 matplotlib ConnectionPatch,即用于 Cartopy 投影

慕森王 2023-02-15 16:53:09
問題:我想使用 matplotlib.patches.ConnectionPatch 連接兩個軸,其中一個是 Cartopy 地圖投影。預期:每個軸中的兩個緯度/經度坐標應由一條線連接。結果:線轉到地圖投影中的 0,0 坐標,而不是定義的緯度/經度。如果投影是未修改的 cartopy.crs.PlateCarree(),它確實會按預期工作,但任何其他投影(例如 Robinson())或具有備用 central_longitude 的投影不會。代碼:import matplotlib.pyplot as pltimport matplotlib.patches as patchesimport cartopy.crs as ccrsplt.close('all')fig = plt.figure()ax = plt.subplot(projection=ccrs.Robinson())lon,lat = 145,-30ax.stock_img()ax.plot(lon,lat, marker='x', color='r', transform=ccrs.PlateCarree())ax2 = fig.add_axes([0.1,0.06,0.8,0.1])ax2.plot(lon,lat,marker='x', color='r')# line between axescon = patches.ConnectionPatch(    xyA=(lon,lat),     xyB=(lon,lat),     coordsA='data', coordsB='data', axesA=ax, axesB=ax2, color='r')ax2.add_artist(con)plt.show()
查看完整描述

2 回答

?
aluckdog

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é)將是:

http://img1.sycdn.imooc.com//63ec9d99000111ea06340378.jpg

查看完整回答
反對 回復 2023-02-15
?
largeQ

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

http://img1.sycdn.imooc.com//63ec9da90001208705100360.jpg

我知道這不是 100% 與 OP 相關,但它確實回答了標題的問題,因此它更像是對遇到我遇到的相同(未知)問題的其他人的潛在幫助。



查看完整回答
反對 回復 2023-02-15
  • 2 回答
  • 0 關注
  • 200 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號