爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 23520|回复: 3

[求助] 对站点资料做相关分析后画色斑图的问题

[复制链接]

新浪微博达人勋

发表于 2020-5-18 14:46:52 | 显示全部楼层 |阅读模式

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

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

x
按照站点资料画色斑图的思路,我对站点资料进行相关分析,分析后的结果画色斑图,结果色板图是下面这样。 corr1.png
相关分析的结果应该是没有问题,就是画图不知道怎么回事,但是我用java的MeteoInfo画出来了,不知道是不是插值算法问题,麻烦各位帮忙看看是画图哪里有问题吗?先谢谢各位了。
代码参考自
http://bbs.06climate.com/forum.php?mod=viewthread&tid=42437
以及http://bbs.06climate.com/forum.php?mod=viewthread&tid=57932&extra=page%3D1

附代码:
  1. import os
  2. import maskout2 as maskout
  3. import numpy as np
  4. import xarray as xr
  5. from scipy.interpolate import Rbf
  6. import matplotlib as mpl
  7. import matplotlib.pyplot as plt
  8. import cartopy.crs as ccrs
  9. import cartopy.feature as cfeature
  10. from cartopy.io.shapereader import Reader
  11. import os
  12. import time
  13. import datetime
  14. import pandas as pd

  15. last_time = time.time()

  16. plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文
  17. plt.rcParams['axes.unicode_minus'] = False  # 用来正常显示负号

  18. SHP = './shapefile/china_shp'
  19. root = os.path.dirname(__file__)
  20. SHP = os.path.join(root, SHP)

  21. # 数据处理
  22. data = pd.read_csv('corr1.csv', header=0)
  23. lon = data['Lon']
  24. lat = data['Lat']
  25. rain_data = data['corr']


  26. # 插值
  27. olon = np.linspace(71, 138, 88)
  28. olat = np.linspace(16, 56, 88)
  29. olon, olat = np.meshgrid(olon, olat)
  30. func = Rbf(lon, lat, rain_data, function='cubic')
  31. pre_grid = func(olon, olat)

  32. # 字体
  33. mpl.rcParams['font.sans-serif'] = ['Times New Roman']
  34. mpl.rc('font', size=15, weight='normal')
  35. font = {'family': 'SimHei', 'weight': 'normal', 'size': 15}

  36. # 颜色
  37. # 颜色
  38. levels = [-1.0,
  39.           -0.872,
  40.           -0.764,
  41.           -0.631,
  42.           -0.549,
  43.           0.0,
  44.           0.549,
  45.           0.631,
  46.           0.764,
  47.           0.872
  48.           ]
  49. crgb = [
  50.     '#200080',
  51.     '#1000bf',
  52.     '#0000ff',
  53.     '#007fff',
  54.     '#00ffff',
  55.     '#ffff00',
  56.     '#ff7f00',
  57.     '#ff0000',
  58.     '#800020',
  59. ]
  60. cmaps = mpl.colors.ListedColormap(crgb)
  61. norm = mpl.colors.BoundaryNorm(levels, 9)

  62. # 画图
  63. proj = ccrs.PlateCarree(central_longitude=105)
  64. fig = plt.figure(figsize=(16, 9), facecolor='none')
  65. ax = fig.add_subplot(1, 1, 1, projection=proj)
  66. ax.set_extent([73, 136, 15, 55], ccrs.PlateCarree())

  67. ax.add_geometries(Reader(os.path.join(SHP, 'cnhimap.shp')).geometries(),
  68.                   ccrs.PlateCarree(),
  69.                   facecolor='none',
  70.                   edgecolor='#737373',
  71.                   linewidth=1,
  72.                   )

  73. cf = ax.contourf(olon, olat, pre_grid, levels=levels, cmap=cmaps, norm=norm, zorder=0, transform=ccrs.PlateCarree())

  74. # 位置[左,下,右,上]
  75. pos_cb = []
  76. cb_ax = fig.add_axes()
  77. cbar = fig.colorbar(cf, ax=ax, orientation="vertical", aspect=25, pad=0.01, shrink=0.7)
  78. cbar.set_label('', fontdict=font)
  79. cbar.set_ticklabels(levels)
  80. ax.set_title('站点资料温度-降水相关分析', fontdict=font)

  81. #  南海
  82. pos1 = ax.get_position()
  83. # 位置[左,下,右,上]
  84. pos2 = [pos1.x1 - ((pos1.x1 - pos1.x0) / 7), pos1.y0, pos1.width / 7, pos1.height / 5]

  85. proj_n = ccrs.LambertConformal(central_latitude=90, central_longitude=115)
  86. ax_n = fig.add_axes(pos2, projection=proj_n)
  87. ax_n.set_extent([105, 125, 0, 25], ccrs.PlateCarree())
  88. ax_n.add_geometries(Reader(os.path.join(SHP, 'cnhimap.shp')).geometries(),
  89.                     ccrs.PlateCarree(),
  90.                     facecolor='none',
  91.                     edgecolor='k',
  92.                     linewidth=1)

  93. # 白化
  94. clip = maskout.shp2clip(cf, ax, shpfile=os.path.join(SHP, 'country1.shp'), region='China', proj=proj)

  95. # plt.show()
  96. plt.savefig('out/corr1.jpg',
  97.             format='jpg',
  98.             # bbox_inches='tight',
  99.             # transparent=True,
  100.             dpi=600) # bbox_inches='tight' 图片边界空白紧致, 背景透明

  101. print(f"cost: {datetime.timedelta(seconds=time.time() - last_time)} s")
复制代码


代码中使用到的相关分析结果是下面这样:
corr.png

相关分析结果文件:
链接: https://pan.baidu.com/s/1GRLHfKrjuNPNzPIXJp-edA 提取码: 43ru



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

新浪微博达人勋

发表于 2021-1-28 16:52:17 | 显示全部楼层
请问python库中怎么安装maskout2?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-2-4 08:12:28 来自手机 | 显示全部楼层
这个需要学习一波
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2021-4-14 12:22:09 | 显示全部楼层
谢谢分享{:eb302:}{:eb302:}{:eb328:}
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

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