日记(画图)

1、导入库

import xarray as xr
import numpy as np
import os
import matplotlib.pyplot as plt
from pandas.core.frame import DataFrame 
from scipy.stats.mstats import ttest_ind
import cartopy.crs as ccrs
import cartopy.feature as cfeature
import cartopy.mpl.ticker as cticker
import matplotlib.patches as patches

2、生成绘制填色的数据

filePath = '文件夹路径'
#获取文件夹下所有文件名
filename = os.listdir(filePath)
#文件名过滤
filename = list(filter(lambda x:x.startswith('文件名头'), filename))
#新建一个数组存放数据,10个文件(10个站点),40年,每年62日
tmax_all = np.zeros((10,40*62))
for i in range(10):
    f = xr.open_dataset('/文件夹路径/{}'.format(filename[i]))    #打开NC文件,格式化字符串{}.format()
    tmax = f.TMAX.loc[f.time.dt.month.isin([7,8])].loc['1970-07-01':'2009-08-31']    #为什么可以写两个LOC,不太明白 再学习下numpy库的使用方法
    tmax_all[i] = tmax.interpolate_na(dim="time", method="linear")    #以时间维度 对缺测值NAN 进行线性插值,线性插值:前一天和后一天的加权平均
tmax_mean = np.nanmean(tmax_all,axis=0)    #对10个站点进行平均,为防还是有些缺测值没有被插值,使用nanmean函数求平均
tmax_2d = tmax_mean.reshape((40,62))    #变换成二维数组

3、生成绘制等值线的数据

tmax_copy = tmax_mean.copy()
#去掉零星的33值,因为等值线画在连续两天出现33度
for i in range(1,40*62-1,1):
    if ((tmax_copy[i]>=33)&(tmax_copy[i-1]<33)&(tmax_copy[i+1]<33)):
        tmax_copy[i]=32
tmax_copy_2d = tmax_copy.reshape((40,62))

4、画图

fig = plt.figure(figsize=(12,8))    #创建figure对象
ax = fig.add_axes([0.1, 0.1, 0.4, 0.6])    #创建axes对象
#填色函数contourf,x轴0-61等差数列,y轴1970-2009等差数列,填色数据为tmax_2d,levels为29-35,colors每一层制定一个颜色,29以下没有设置颜色,默认为白色
c1 = ax.contourf(np.arange(0,62,1),np.arange(1970,2009,1), tmax_2d, zorder=0,levels =np.arange(29,36,1),    
                      colors=['khaki','darkkhaki','palegoldenrod','cornsilk','coral','orangered'])                 
ax.set_title('Maximum temperature in Korea(JUL-AUG)',fontsize=14,loc='center')
ax.set_xticks([0,14,31,46,61])    #添加刻度位置
ax.set_xticklabels(['Jul1','Jul15','Aug1','Aug15','Aug31'])    #刻度对应的标签
ax.set_ylabel('year',fontsize=16)
#等值线函数contour
c2 = ax.contour(np.arange(0,62,1),np.arange(1970,2009,1), tmax_copy_2d, zorder=0,levels =[33],colors=['k'],linestyles=['--'])   
fig.colorbar(c1)

 

posted @ 2022-08-31 15:21  EROEG  阅读(30)  评论(0编辑  收藏  举报