研究台风路径和影响,除了直接绘制台风路径,我们还往往想知道研究的台风在海上各个经纬度的频数分布,并直观展示在地图上。

之前和大家交流过如何从台风路径数据集里提取指定条件的台风(用pandas库提取IBTrACS中特定条件的热带气旋最佳路径数据),下面就在这个工作的基础上,进一步来绘制台风路径数据。

这里统计频数的经纬度网格分辨率采用1°×1°,因为这样索引最方便(因为整型可以直接作为数组的索引值),绘制出整个西北太平洋台风的频数图像也不会过于粗糙。

为了不重复统计,每个台风所经过的经纬度网格(1°×1°)只统计一次,即使台风在同个经纬度网格内逗留多个时次或多次进入同个网格,也不会重复统计。

在开始之前,把需要研究的台风编号(JTWC的编号)取出,方便后续用这个编号(也就是每个台风的唯一标识)来进行DataFrame的筛选和提取。

由于本人之前已经进行了相关工作,把筛选下来的台风编号放到了csv文件里了,所以这里代码是直接从csv文件里读取这个列表的,但务必确保这个列表里没有重复的台风,不然就会重复统计了

有了台风列表和台风路径数据集下面就可以统计每个经纬度网格里台风经过的频数

import pandas as pd
import numpy as np
import os
import csv
import matplotlib.pyplot as plt
import cartopy.crs as ccrs
import cartopy.mpl.ticker as cticker
import cartopy.feature as cfeature
import csv
import cmaps as cm# 读取台风数据集
TCdata = pd.read_csv('IBTrACS-JTWC.csv',index_col=0)TC_list=[]
# 读取台风编号列表
with open('WNP_TC_1979-2020_USA_ID.csv') as f:csv_file = csv.reader(f)for row in csv_file :TC_list.append(row[0])# 设定研究海区的经纬度范围
region =[100,180,0,60]
lon = np.arange(region[0],region[1]+1,1)
lat  =np.arange(region[2],region[3]+1,1)# 新建数组,用于存放每个格点(1°×1°)的台风频数
arr_N = np.zeros((len(lon),len(lat)),dtype=int)# 遍历台风列表
for ID in TC_list:data = TCdata[TCdata['USA_ATCF_ID']==ID]data = data.copy()# 把经纬度变为整型data['lon_i']=data['USA_LON'].astype('int')data['lat_i']=data['USA_LAT'].astype('int')# 创建用于存放整型经纬度的dfdata_lonlat=data[['lon_i','lat_i']]# 去掉重复值,避免重复统计data_lonlat = data_lonlat.drop_duplicates()# 去掉不在研究海区范围内的台风data_lonlat=  data_lonlat[[ i >= region[0] and  i <= region[1] for i in data_lonlat['lon_i']]]data_lonlat=  data_lonlat[[ i >= region[2] and  i <= region[3] for i in data_lonlat['lat_i']]]# 遍历每行经纬度,即台风经过的点for rows in data_lonlat.itertuples():# 用经纬度来索引数组,数组的index是从0开始的,所以要减去研究海区的起始经度region[0]和起始维度region[2]# 让索引出来的数组的值(即该位置的台风频数)+1arr_N[rows[1]-region[0],rows[2]-region[2]] += 1 

arr_N就是存放了每个格点台风频数的数组了,第一维是lon,第二维是lat

最后画图看看

# 创建Figure
fig = plt.figure(figsize=(9, 6))ax1 = fig.add_subplot(1,1,1, projection=ccrs.PlateCarree(central_longitude=0))# 设置绘图区域的经纬度,最好和数据的范围一样
latlon=[100,180,0,60]# 设置ax1的绘图范围ax1.set_extent(latlon)
ax1.set_xlim(latlon[:2])
ax1.set_ylim(latlon[2:])# 为ax1添加地理经纬度标签及刻度ax1.set_xticks(np.arange(latlon[0],latlon[1]+1,10), crs=ccrs.PlateCarree())
ax1.set_yticks(np.arange(latlon[2],latlon[3]+1,10), crs=ccrs.PlateCarree())
ax1.xaxis.set_major_formatter(cticker.LongitudeFormatter())
ax1.yaxis.set_major_formatter(cticker.LatitudeFormatter())# 为ax1添加填色cf1 = ax1.contourf(lon,lat,arr_N.T,cmap=cm.WhiteBlueGreenYellowRed,levels=np.arange(0,50,0.1),extend='max')#为ax1添加海岸线ax1.coastlines()# 色标
fig.colorbar(cf1,ax=ax1,ticks=np.arange(0,51,5),fraction=0.035,label="TC Count")# 标注
ax1.text(102,56,f"TC Count : {len(TC_list)}",fontsize=13,color='k')
ax1.text(155,1,"Data From : IBTrACS-JTWC",fontsize=10,color='k')# 标题
title='WNP_TC_Count_1979-2020'
plt.title(title,fontsize=18)

大功告成~~

欢迎交流

祝大家科研顺利~

绘制西北太平洋台风频数分布填色图相关推荐

  1. python气象数据可视化学习笔记7——利用cartopy+cnmaps和ERA5数据绘制填色图并对中国地区白化

    文章目录 1. 效果图 2. 绘制基于中国地区的填色图(大地图) 3. 添加南海小地图 4. 读取数据并传入绘图函数 5. 代码完整版 1. 效果图 前序博文cnmaps填色图介绍了cnmaps在线地 ...

  2. python绘制contourf填色图,设置色标,解决填图的颜色与实际数值不一致的问题

    import matplotlib as mpl from matplotlib import cmfs = 13 # 设置字体大小 # 设置色条 cmap = cm.get_cmap('jet') ...

  3. 2、Python绘制等值线图与填色图

    目录 一.导入软件包 二.读取文件并进行数据处理 三.绘制等值线图 四.绘制填色图 本文主要介绍如何利用Python绘制等值线图以及填色图,因需要利用Cartopy软件包,请提前配置好Python环境 ...

  4. python绘制contourf填色图,数值超出色条设定的范围时出现空白区域

    法1.cmap.set_over('yellow') 法2.plt.colorbar(im1, cax=ax9, extend='max') 法3.plt.clim(0, 30) # clim即col ...

  5. python气象数据可视化学习笔记6——利用python地图库cnmaps绘制地图填色图并白化

    文章目录 1. 效果图 2. cnmaps简介及安装 2.1 写在前面 2.2 cnmaps简介和安装 3. 导入库 4. 定义绘图函数 4.1 使用get_adm_maps返回地图边界 4.2 ax ...

  6. python绘制气象海洋不规则空间站点数据的填色图

    大气海洋领域有很多空间分布的二维数据需要绘制成填色图(或等值线图),python中常用matplotlib中的contour或contourf函数,但是这两个函数要求数据分布于规则网格上. 对于很多模 ...

  7. python给折线图区间填充颜色_Python气象数据处理与绘图(3):以EOF为例画柱状图(折线图)和带地图底图的填色图...

    更新完整版,修复了几个小问题,提供了测试数据下载 最新版见此 EOF(经验正交分解)是气候研究中常用的研究变量时空变化特征的分析方法,短期气候课中都学过中国东部夏季降水通过EOF分解可以分为三类雨型, ...

  8. python画填色图时,如何让分层的填色变为渐变色

    python画填色图时,如何让分层的填色变为渐变色 注:自己用来备忘的 以画海洋的地形图为例 数据为一个三位数据,有经度(lon),纬度(lat),高度(z)三个变量. 我们绘制的地形图为了美观,只想 ...

  9. Python学习笔记——绘图设置(二)填色图与等值线图

    import numpy as np import matplotlib.pyplot as plt delta = 0.025 x = np.arange(-3., 3., delta) # 创建x ...

最新文章

  1. opencv计算亮度
  2. c++学习笔记之运算符的重载
  3. java pdf 水印_Java 在PDF中添加水印——文本/图片水印
  4. jQuery 3.3.1已经发布,开发团队正在准备4.0版本
  5. layui分页limit不显示_【图片】新手 分页显示不了呀【layui吧】_百度贴吧
  6. OpenCL “速成”冲刺【第一天】
  7. Python学习笔记之函数(五)
  8. Linux curl命令使用代理、以及代理种类介绍(附:curl命令详解)
  9. 阿里云全站加速DCDN全面支持WebSocket协议
  10. LVS三种工作模式、十种调度算法介绍
  11. python字符串重复_【python】判断一个字符串是否包含重复字符?
  12. 记号的认识、公式的理解
  13. fastdfs的tracker启动之后一直选举_Elasticsearch选举流程详解
  14. Excel 2013 基础视频教程上线了
  15. 微商引流的六种有效方法
  16. Arcgis栅格数据转至GMT支持的.grd格式绘图
  17. matlab 7.0 win8,Win8.1系统中matlab7.0不兼容的解决方法
  18. 本地用户和组 无法访问计算机 远程过程调用失败,如何解决远程过程调用失败?怎样使用向日葵远程控制?...
  19. 销毁一颗二叉树--Destroy(Node* root)
  20. JavaSE基础答案合集class篇

热门文章

  1. 用unbound搭建简单的DNS服务器
  2. 明解C语言 7-6例题分析
  3. 时间片轮转调度算法的计算
  4. 成语猜猜看小游戏(一)
  5. 字符编码:区位/国标(gb2312、gbk)/机内码/ASCII/ANSI/Big5
  6. 基于单位四元数的姿态插补算法
  7. ChatGPT全球爆火,究竟有何特别之处?
  8. 计算机应用基础模拟试卷 一,计算机应用基础模拟试卷一模拟试卷-02answer
  9. ubuntu20.04+noetic Roboware 安装问题
  10. 计算机考office2010,由于我们计算机考windows7和office2010,我可以不改原本的WIndows 10系统直...