爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 4126|回复: 4

[求助] python 循环绘制子图的坐标轴设置问题

[复制链接]

新浪微博达人勋

发表于 2023-1-31 11:46:44 | 显示全部楼层 |阅读模式

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

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

x
求助!!!
想请教一下各位大拿:
想绘制一张含有14个子图的图片,所以创建了一个含有16个axes的大底图
随后我删除了两个用不上的ax,开启了共享坐标轴。
代码如下:

fig,axes  = plt.subplots(4,4,dpi=500,figsize=(16,14),
                        sharex=True,
                        sharey=True,
                        subplot_kw={'projection':proj})

plt.delaxes(axes[3,2])
plt.delaxes(axes[3,3])


for i in range(4):
    for j in range(4):

        plot_contour(axes[i,j], nlon, nlat,      mtrend_23[4*i+j,:,:], proj, 'RdBu')        
        plot_scatter(axes[i,j],  lon,  lat,   mtrend_23_test[4*i+j,:], proj, 'binary', 0, 1)


坐标轴并没有共享成功,我想可能是与我删掉了两个ax有关
想请教一下,除了挑出来挨个调整,有没有比较简便的方法
在网上搜索的都是规则分布的,没怎么看到这样的例子。谢谢!



出图情况

出图情况
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2023-2-18 15:06:43 | 显示全部楼层
不知道这样是不是你想要的:

  1. from cartopy.mpl.ticker import LongitudeFormatter,LatitudeFormatter

  2. import cartopy.crs as ccrs

  3. import matplotlib.pyplot as plt

  4. import numpy as np

  5. proj  =  ccrs.PlateCarree()

  6. fig, axes = plt.subplots(4, 4, sharex=True, sharey=True, figsize=(6,6),dpi=200,
  7.                     subplot_kw={'projection':proj})
  8. fig.tight_layout()


  9. for i, row in enumerate(axes):
  10.     for j, col in enumerate(row):
  11.         
  12.         
  13.         axes[i,j].coastlines('50m')
  14.         # set_xytick(axes[i,j])
  15.         box = [0,6,15,20]
  16.         xstep,ystep = 3,2
  17.         axes[i,j].set_extent(box,crs=ccrs.PlateCarree())
  18.         
  19.         axes[-1,j].set_xticks(np.arange(box[0],box[1]+xstep, xstep),crs=ccrs.PlateCarree())
  20.         axes[i,0].set_yticks(np.arange(box[2], box[3]+1, ystep),crs=ccrs.PlateCarree())
  21.         lon_formatter = LongitudeFormatter(zero_direction_label=False)#True/False
  22.         lat_formatter = LatitudeFormatter()
  23.         axes[-1,j].xaxis.set_major_formatter(lon_formatter)
  24.         axes[i,0].yaxis.set_major_formatter(lat_formatter)

  25. plt.tight_layout()
  26. plt.delaxes(axes[3,2])
  27. plt.delaxes(axes[3,3])
  28. plt.show()
复制代码

评分

参与人数 1金钱 +10 收起 理由
胡斯默羊 + 10 很给力!

查看全部评分

密码修改失败请联系微信:mofangbao
回复 支持 2 反对 0

使用道具 举报

新浪微博达人勋

发表于 2023-2-9 14:41:41 来自手机 | 显示全部楼层
本帖最后由 crabdudu 于 2023-6-14 21:49 编辑

帮顶,帮顶,帮顶
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2023-2-18 15:09:12 | 显示全部楼层
效果图在这里
非规则共享.png
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2023-3-7 14:56:59 | 显示全部楼层
taiyang 发表于 2023-2-18 15:06
不知道这样是不是你想要的:

{:eb511:}已经很接近了,我学习学习,感谢您提供的代码!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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