簡體   English   中英

同一張圖上的正常投影和cartopy投影如何處理好?

[英]How to deal well with normal and cartopy projection on the same figure?

我想制作這種圖,取自 Sallee 等人。 (2021) 如果可能的話,直接從 Python 獲取:

圖目標

在主子圖中有一個 Cartopy 投影cartopy.crs.Robinson(central_longitude=0, globe=None) ,在它的右側有一個接近我在 Cartopy 投影上的值的密度函數(在緯度上)的東西。 使用 Robinson 投影管理標簽對我來說並不方便,而使用cartopy.crs.PlateCarree(central_longitude=0.0, globe=None)標記軸沒有任何問題。

這是我目前在堆棧上建立的最相關的主題( 同一圖中的普通子圖和 cartopy 子圖的組合),但由於我的目標圖有點復雜(顏色條上方的大小羅賓遜投影,兩條虛線連接子圖,標注經度和緯度)。

謝謝 !

有什么具體的東西你沒有設法創造嗎? 您要求的大部分內容都可以從 Cartopy/Matplotlib 中輕松獲得。

附加注釋,如使用 Matplotlib 可以插入縮放線,例如:
https://matplotlib.org/stable/gallery/subplots_axes_and_figures/zoom_inset_axes.html

但我個人會避免這種情況,只需對齊軸以確保它們共享相同的緯度。 對於試圖解釋數據的用戶來說,這可能更直觀。

一個帶有一些隨機數據的簡單示例:

lats = np.linspace(90-6, -90+6, 15)
data = np.random.randn(15, 32)

proj = ccrs.Robinson(central_longitude=0, globe=None)

fig = plt.figure(figsize=(11, 5), dpi=86, facecolor="w")
spec = fig.add_gridspec(9, 5)

ax1 = fig.add_subplot(spec[1:, :4], projection=proj)
im = ax1.imshow(
    data, cmap="Blues", vmin=-3, vmax=3,
    extent=[-180, 180,90,-90], transform=ccrs.PlateCarree())

cax = fig.add_subplot(spec[0, 1:-2])
cb1 = fig.colorbar(im, cax=cax, orientation="horizontal")
cax.set_title("Something [-]")
cax.xaxis.set_ticks_position('top')

grd = ax1.gridlines(
    draw_labels=True, 
    xlocs=range(-180, 181, 90), 
    ylocs=range(-60, 61, 30), 
    color='k',
)
grd.top_labels = False

ax1.add_feature(cfeature.LAND, facecolor="#eeeeee", zorder=99)


ax2 = fig.add_subplot(spec[1:, -1])
ax2.plot(data.mean(axis=1), lats)
ax2.axvline(0, color="k", lw=1)
ax2.set_xlim(-0.5, 0.5)
ax2.set_yticks(range(-60, 61, 30))
ax2.yaxis.set_label_position("right")
ax2.yaxis.tick_right()
ax2.grid(axis="y")
ax2.set_ylabel("Latitude [deg]")

在此處輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM