读取csv文件对数据进行插值 然后生成图片
#coding=utf-8
import numpy as np
import pandas as pd
import os
from metpy.gridding.gridding_functions import (interpolate, remove_nan_observations,
remove_repeat_coordinates)
from pylab import *
from scipy.interpolate import Rbf,griddata
def scipy_idw(x, y, z, xi, yi):
interp = Rbf(x, y, z, function='linear')
return interp(xi, yi)
def scipy_cubic(x,y,z,xi,yi):
"""
use the scipy bulid in interpolate
"""
z2 = griddata((x, y), z, (xi, yi), method='cubic',fill_value=0)
return z2
def station_test_data(csvfile):
data = pd.read_csv(csvfile)
data[data==9999]=np.nan
dataset = data
return dataset
def draw_csv(csvfile,varname,outdir="."): #读取csv文件
dataset = station_test_data(csvfile)
keys =["TEM","RHU","PRE_1h","WIN_S_Max","GST"] # csv文件的要素
lon = dataset['Lon'].values
lat = dataset['Lat'].values
limit = [120,136,40,54] #定义一个经纬度范围
llon ,llat,vvalue=[],[],[] # 定义三个list存放值
for varname in keys:
print 'var=',varname
value = dataset[varname].values
for ii in range(len(value)):
if np.float(value[ii]) > -500 and np.float(value[ii])<500:
vvalue.append(value[ii])
llon.append(lon[ii])
llat.append(lat[ii]) #进行极值处理 存放到数组
x,y,z = np.asarray(llon),np.asarray(llat),np.asarray(vvalue)
fig = figure(figsize=(8,8))
axes = plt.subplot()
axes.set_xticks([])
axes.set_yticks([])#不显示 坐标
axes.axis('off')# 不显示边框
tricontourf(x,y,z) # 进行插值处理
colorbar()# 色标柱
outname = outdir +os.sep +os.path.basename(csvfile).split(".")[0]+'_'+varname+".png" #生成图片的名字
plt.axis(limit)
savefig(outname,dpi=100,tranparent=True) #储存图片,透明处理
if __name__ == "__main__":
# csvfile = r'C:\work\awscsv\20170311122000.csv'
# indir = r'D:\VIPS4\DATASETS_FOR_VIPS\analysis\awscsv'
# outdir = r'D:\VIPS4\DATASETS_FOR_VIPS\analysis\awscsv_png'
# files = os.listdir(indir)
# files.sort()
# print files[0],files[-1]
# csvfile = indir +os.sep + files[-1] #查找文件下最新的文件
csvfile = r'C:\Users\Administrator\Desktop\20170418140500.csv'
outdir = r'D:\testsurf'
draw_csv(csvfile,'curtemp',outdir=outdir)