meteva的帮助文档看这里。
这些问题需要修改meteva的库函数,那么,怎么知道meteva的代码在电脑的哪里呢?
可以在meteva的安装环境中用pip show meteva命令,得到Location。
%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)
然后报错了。
检查以后发现是因为站点变量sta的时间列是nan。
所以,只能在插值前随便给sta的时间列赋个值。
sta = meb.sta_data(df,columns = ["id","lat",'lon',"data0"])
print(sta)
sta['data0'] = 100*sta['data0']
print(sta)
然后就可以啦。
若将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 = "填色图 ")
报错信息为
经过检查,发现原代码中的计算有点问题,应该修改plot_tools.py里的plot_2d_grid_list函数里图片高度的计算
height_map = width_map * abs(rlat) / rlon
加一个取绝对值的函数。
使用填色绘图函数的时候,发现经度轴和纬度轴的格式不同:经度轴是最右边有一个”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]
如果,用来画散点图的数据有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]