试用python库meteva(气象行业)

meteva的帮助文档看这里。

使用过程中发现的一些问题及其修改方式:

这些问题需要修改meteva的库函数,那么,怎么知道meteva的代码在电脑的哪里呢?
可以在meteva的安装环境中用pip show meteva命令,得到Location。
试用python库meteva(气象行业)_第1张图片

(1)站点插值到格点时,插值函数报错:

%matplotlib inline
%load_ext autoreload
%autoreload 2
import meteva.base as meb
import numpy as np
import pandas as pd
#读文件
file = 'G:/multi_elements_and_qc/station_hour/output/huitu_PRS.csv'
data = pd.read_csv(file)
#用meteva的函数初始化站点数据
sta = meb.sta_data(df,columns = ["id","lat",'lon',"data0"])
#用meteva的函数初始化网格数据
grid0 = meb.grid([105,121,0.05],[1,24,0.05])  #初始化一个网格,其中时间、时效、层次和成员信息都暂时使用缺省设置
#插值
grd1 = meb.interp_sg_idw(sta,grid0,nearNum = 20)

然后报错了。
试用python库meteva(气象行业)_第2张图片
检查以后发现是因为站点变量sta的时间列是nan。
所以,只能在插值前随便给sta的时间列赋个值。

sta = meb.sta_data(df,columns = ["id","lat",'lon',"data0"])
print(sta)
sta['data0'] = 100*sta['data0']
print(sta)

然后就可以啦。

(2)网格数据grd为倒序时,绘图高度为负值

若将grid0的纬度设置为倒序,然后插值再绘图,就会报错

grid0 = meb.grid([105,121,0.05],[24,1,-0.05])
grd1 = meb.interp_sg_idw(sta,grid0,nearNum = 20)
meb.plot_tools.contourf_2d_grid(grd1,cmap=cmap,title = "填色图 ")

报错信息为
试用python库meteva(气象行业)_第3张图片
经过检查,发现原代码中的计算有点问题,应该修改plot_tools.py里的plot_2d_grid_list函数里图片高度的计算

height_map = width_map * abs(rlat) / rlon 

加一个取绝对值的函数。

(3)绘制填色图时,坐标轴不统一:

试用python库meteva(气象行业)_第4张图片
使用填色绘图函数的时候,发现经度轴和纬度轴的格式不同:经度轴是最右边有一个”E“,纬度轴是每个数字后面都有一个”N“。
然后,看了meteva的帮助文档,发现它的示例也是这样的。
所以,修改meteva库的代码,改成每个数字后面都有一个字母的样式。
在/base/tool/plot_tools.py里的plot_2d_grid_list函数里,将xticks设置的部分改为

    xticks = np.arange(vmin, vmax, inte)
    xticks_label = []
    xticks_label_None = []
    for i in range(len(xticks)):
        if xticks[i]>0:
            xticks_label.append(str(round(xticks[i],6))+"°E")
        else:
            xticks_label.append(str(round(xticks[i],6))+"°W")
        xticks_label_None.append("")
    if xticks[-1] >0:
        xticks_label[-1] ="   " +xticks_label[-1]######刘霄燕修改
    else:
        xticks_label[-1] ="   " +xticks_label[-1]

(4)画散点图时报错

如果,用来画散点图的数据有nan的话,那么plot_tools.py文件里的scatter_sta函数的以下语句会计算错误。

vmax_v = np.max(sta_without_iv[plot_data_names].values)
vmin_v = np.min(sta_without_iv[plot_data_names].values)

所以,在画散点图之前,需要把sta的nan值去掉

data=data[np.isnan(data['相关系数'])==False]

你可能感兴趣的:(python,meteva,python)