读取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)

posted @ 2017-04-19 16:25  Littlefish-  阅读(1337)  评论(0编辑  收藏  举报
Document