爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 27774|回复: 18

[求助] Python绘制水汽通量图问题求助

[复制链接]

新浪微博达人勋

发表于 2019-9-1 21:09:33 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Tao_Xu 于 2019-9-1 21:17 编辑
  1. from netCDF4 import Dataset
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. from mpl_toolkits.basemap import Basemap
  5. import matplotlib.cm as cm

  6. meteo_file = "/Users/ACER-PC/PycharmProjects/ERA-interim_Vertical integral of divergence of moisture flux/Data/ERA-interim_Vertical integral of divergence of moisture flux201812.nc"
  7. fh = Dataset(meteo_file, mode='r')

  8. # 获取每个变量的值
  9. lons = fh.variables['longitude'][:]
  10. lats = fh.variables['latitude'][:]
  11. tlml = fh.variables['p84.162'][:]
  12. elml = fh.variables['p71.162'][:]
  13. nlml = fh.variables['p72.162'][:]



  14. m = Basemap(llcrnrlon=50., llcrnrlat=-10.,
  15.              urcrnrlon=160., urcrnrlat=60,
  16.              projection='cyl', resolution='l')
  17. lon, lat = np.meshgrid(lons, lats)
  18. xi, yi = m(lon, lat)


  19. # 数据只绘制第1个时间的(tlml_0)
  20. tlml_0 = tlml[0:1:, ::, ::]
  21. cs = m.contourf(xi, yi, np.squeeze(tlml_0), range (-21,1), cmap=cm.bone)
  22. elml_0 = elml[0:1:, ::, ::]
  23. nlml_0 = nlml[0:1:, ::, ::]
  24. wind= m.quiver(lon, lat, np.squeeze(elml_0), np.squeeze(nlml_0), color='red', width=0.0005, headwidth=60, headlength=100)


  25. # Add Grid Lines
  26. # 绘制经纬线
  27. m.drawparallels(np.arange(-90., 91., 20.),labels=[True,False,True,True],color='dimgrey',dashes=[1, 3])
  28. m.drawmeridians(np.arange(-180., 181., 30.),labels=[True,True,False,True],color='dimgrey',dashes=[1, 3])

  29. # Add Coastlines
  30. m.drawcoastlines(color='grey', linewidth=0.3)



  31. # Add Colorbar
  32. cbar = m.colorbar(cs, location='bottom', pad="10%")
  33. cbar.set_label('Divergence of moisture flux (kg m**-2 s**-1)')

  34. # Add Title
  35. plt.title('Vertical integral of divergence of moisture flux', fontsize= 12)
  36. plt.savefig("Vertical integral of divergence of moisture flux.png", dpi=500, bbox_inches='tight')
  37. plt.show()
复制代码

Vertical integral of divergence of moisture flux20181230.png

本帖被以下淘专辑推荐:

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

新浪微博达人勋

 楼主| 发表于 2019-9-1 21:14:45 | 显示全部楼层
好像帖子没显示,问题是:最近在利用ERA-interim中计算好的整层水汽通量散度(Vertical integral of divergence of moisture flux)和水汽通量(Vertical integral of eastward water vapour flux及Vertical integral of northward water vapour flux)数据来画图,图中的箭头总是很小(我想用箭头表示水汽通量值的大小),需要图放很大才能看见,不知道是哪里出了问题。刚开始学习Python,不是很熟练,希望好心人帮忙看一下脚本,谢谢,不胜感激!!
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-9-1 21:17:01 | 显示全部楼层
Tao_Xu 发表于 2019-9-1 21:14
好像帖子没显示,问题是:最近在利用ERA-interim中计算好的整层水汽通量散度(Vertical integral of diverg ...

from netCDF4 import Dataset
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import Basemap
import matplotlib.cm as cm

meteo_file = "/Users/ACER-PC/PycharmProjects/ERA-interim_Vertical integral of divergence of moisture flux/Data/ERA-interim_Vertical integral of divergence of moisture flux201812.nc"
fh = Dataset(meteo_file, mode='r')

# 获取每个变量的值
lons = fh.variables['longitude'][:]
lats = fh.variables['latitude'][:]
tlml = fh.variables['p84.162'][:]
elml = fh.variables['p71.162'][:]
nlml = fh.variables['p72.162'][:]



m = Basemap(llcrnrlon=50., llcrnrlat=-10.,
             urcrnrlon=160., urcrnrlat=60,
             projection='cyl', resolution='l')
lon, lat = np.meshgrid(lons, lats)
xi, yi = m(lon, lat)


# 数据只绘制第1个时间的(tlml_0)
tlml_0 = tlml[0:1:, ::, ::]
cs = m.contourf(xi, yi, np.squeeze(tlml_0), range (-21,1), cmap=cm.bone)
elml_0 = elml[0:1:, ::, ::]
nlml_0 = nlml[0:1:, ::, ::]
wind= m.quiver(lon, lat, np.squeeze(elml_0), np.squeeze(nlml_0), color='red', width=0.0005, headwidth=60, headlength=100)


# Add Grid Lines
# 绘制经纬线
m.drawparallels(np.arange(-90., 91., 20.),labels=[True,False,True,True],color='dimgrey',dashes=[1, 3])
m.drawmeridians(np.arange(-180., 181., 30.),labels=[True,True,False,True],color='dimgrey',dashes=[1, 3])

# Add Coastlines
m.drawcoastlines(color='grey', linewidth=0.3)



# Add Colorbar
cbar = m.colorbar(cs, location='bottom', pad="10%")
cbar.set_label('Divergence of moisture flux (kg m**-2 s**-1)')

# Add Title
plt.title('Vertical integral of divergence of moisture flux', fontsize= 12)
plt.savefig("Vertical integral of divergence of moisture flux.png", dpi=500, bbox_inches='tight')
plt.show()
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-9-4 15:48:34 | 显示全部楼层
完全没有在图里看到箭头耶
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-9-4 15:52:57 | 显示全部楼层
试一下用颜色来表示大小?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-9-4 19:50:20 | 显示全部楼层
厉害,学习了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-9-5 10:37:54 | 显示全部楼层
虽然不是很懂python,但是看你脚本里绘制风场的语句:wind= m.quiver(lon, lat, np.squeeze(elml_0), np.squeeze(nlml_0), color='red', width=0.0005, headwidth=60, headlength=100)

这里控制箭头大小的三个参数是 width, headwidth, headlength,你把数值都调整大一些试试,都放大10倍看看呗
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2019-9-6 14:48:45 | 显示全部楼层
涛哥,建议你的颜色棒换成彩虹颜色,这个最小的白色和你底图都重合了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-9-6 22:32:28 | 显示全部楼层
对方的凤飞飞 发表于 2019-9-6 14:48
涛哥,建议你的颜色棒换成彩虹颜色,这个最小的白色和你底图都重合了

其实是故意的,为了让大于0的数据不显示出来
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

 楼主| 发表于 2019-9-6 22:37:26 | 显示全部楼层
Tao_Xu 发表于 2019-9-1 21:14
好像帖子没显示,问题是:最近在利用ERA-interim中计算好的整层水汽通量散度(Vertical integral of diverg ...

找到原因了,将数据的分辨率从0.75*0.75变到2.5*2.5后,箭头就变大了,图上数据点也变的没有那么密集了
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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