爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 13115|回复: 2

[源代码] 用python cartopy投影畫zoom into子圖之間的連結線

[复制链接]

新浪微博达人勋

发表于 2021-3-9 17:56:10 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
本帖最后由 dragonphy 于 2021-3-9 20:19 编辑

pythoncartopyzoominto子圖之間的連結線


import matplotlib.pyplot as plt
import numpy as np
import cartopy.crs
from matplotlib.axes import Axes
from matplotlib.patches import Rectangle
import matplotlib.gridspec as gridspec
import matplotlib.patches as patches

csfont ={'family':'serif','style':'normal','weight':'semibold'}
G3x=[116.895, 117.436, 117.436, 116.895, 116.895]
G3y=[35.9754, 35.9754, 36.5198, 36.5198, 35.9754]
G2x=[116.418, 117.779, 117.779, 116.418, 116.418]
G2y=[35.5905, 35.5905, 36.9043, 36.9043, 35.5905]
############
latt =['(b)','(a)']
fig = plt.figure(figsize=(10*1.618,10),constrained_layout=True)
fig.canvas.mpl_connect('resize_event',lambda v: line.recache())
gs = gridspec.GridSpec(1,2,width_ratios=[3,4])
pj=cartopy.crs.Stereographic(central_latitude=(36.2556),central_longitude=(117.1053))
pc =cartopy.crs.PlateCarree()
ax={}
############################### (b)subfig outter domain ###########################
ax[0]=plt.subplot(gs[1],projection = pj)
ax[0].set_extent([114.412,120.588,34.0527,38.9473],crs=pc)
ax[0].text(0.01,0.995,latt[0],transform=ax[0].transAxes,fontsize=16,va='top',ha='left',**csfont)
scale_bar(ax[0], (0.1, 0.05), 40, text_kwargs={'family':'serif'})
############ boxes G2, G3 #############
ax[0].fill(G2x,G2y,facecolor='none',edgecolor='black',linewidth=1,transform=pc)
ax[0].fill(G3x,G3y,facecolor='none',edgecolor='black',linewidth=1,transform=pc)
ax[0].text(116.418,36.9043,'G2',color='black',transform=pc,fontsize=18,**csfont,ha='left',va='bottom')
ax[0].text(116.895,36.5198,'G3',color='black',transform=pc,fontsize=15,**csfont,ha='left',va='bottom')  
############# grid setting ############
g1 = ax[0].gridlines(draw_labels=True, dms=False, x_inline=False, y_inline=False, linestyle='--',color='xkcd:light grey')
g1.xlabel_style = {'size':12,'family':'serif'}
g1.ylabel_style = {'size':12,'family':'serif'}
g1.right_labels = False
g1.top_labels = False
############################# (a)subfiginner domains ##########################
ax[1] = plt.subplot(gs[0],projection = pj)
ax[1].set_extent([116.418, 117.779, 35.5905,36.9043],crs=pc)
ax[1].text(0.01,0.995,latt[1],transform=ax[1].transAxes,fontsize=16,va='top',ha='left',**csfont,c='white')
scale_bar(ax[1], (0.1, 0.05), 10, text_kwargs={'family':'serif'})
############ boxes G2, G3#############
ax[1].text(116.895,35.9754,'G3',color='black',transform=pc,fontsize=17,**csfont,ha='left',va='bottom')
ax[1].fill(G3x,G3y,facecolor='none',edgecolor='black',linewidth=0.8,transform=pc)
############# grid setting ############
g2 = ax[1].gridlines(draw_labels=True, dms=False, x_inline=False, y_inline=False, linestyle='--',color='xkcd:light grey')
g2.xlabel_style = {'size':12,'family':'serif'}
g2.ylabel_style = {'size':12,'family':'serif'}
g2.xlocator =matplotlib.ticker.FixedLocator([116.5,117.0,117.5])
g2.ylocator =matplotlib.ticker.FixedLocator([35.6,36.0,36.4,36.8])
g2.right_labels = False
g2.top_labels = False
###############################################################################
xyA = pj.transform_point(117.779,36.9043,pc)
xyB = pj.transform_point(117.779,35.5905,pc)
con1 =patches.ConnectionPatch(xyA=xyA,xyB=xyA,coordsA=ax[0].transData,coordsB=ax[1].transData,linestyle='--')
con2 =patches.ConnectionPatch(xyA=xyB,xyB=xyB,coordsA=ax[0].transData,coordsB=ax[1].transData,linestyle='--')
fig.add_artist(con1)
fig.add_artist(con2)
fig.tight_layout()
fig.subplots_adjust(wspace=0.1)
plt.show()
example.png
[說明]:

评分

参与人数 1金钱 +20 贡献 +5 收起 理由
mofangbao + 20 + 5

查看全部评分

密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2021-3-10 07:59:38 | 显示全部楼层
学习了~这个用3D会更直观一些了~~
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2021-3-10 08:46:41 | 显示全部楼层
是的,如果模式層頂的高度設置不同時就必須畫成3D的模式域嵌套。或許相關的繪製3D 地圖教學(http://shadedrelief.com/3D_Terrain_Maps/)XD
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表