绘制台风路径(一)

加载函数库

import os  
import pandas as pd  
import numpy as np  
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体  
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像时负号'-'显示为方块的问题    
import cartopy.crs as ccrs  
import cartopy.feature as cfeat
from matplotlib.lines import Line2D  
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter  

 读取文件

df = pd.read_csv('D:/data/2024_TY2403.csv')  

完整代码 

import os  
import pandas as pd  
import numpy as np  
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 指定默认字体  
plt.rcParams['axes.unicode_minus'] = False  # 解决保存图像时负号'-'显示为方块的问题    
import cartopy.crs as ccrs  
import cartopy.feature as cfeat
from matplotlib.lines import Line2D  
from cartopy.mpl.ticker import LongitudeFormatter, LatitudeFormatter  
  
# 读取数据  
df = pd.read_csv('D:/data/2024_TY2403.csv')  
  
# 定义颜色函数  
def get_color(grade):  
    if grade == '热带低压' or grade == '热带扰动':  
        return '#FFFF00'  
    elif grade == '热带风暴':  
        return '#6495ED'  
    elif grade == '强热带风暴':  
        return '#3CB371'  
    elif grade == '台风':  
        return '#FFA500'  
    elif grade == '强台风':  
        return '#FF00FF'  
    elif grade == '超强台风':  
        return '#DC143C'  
  
# 创建地图并绘制台风路径  
def plot_typhoons(df, extent):  
    fig = plt.figure(figsize=(12, 8))  
    ax = fig.add_subplot(1, 1, 1, projection=ccrs.PlateCarree())  
  
    # 添加底图(这里以简单的海岸线为例,您可以根据需要添加其他底图)  
    ax.add_feature(cfeat.COASTLINE)  
  
    # 设置地图范围  
    ax.set_extent(extent, crs=ccrs.PlateCarree())  
  
    # 添加网格线  
    gl = ax.gridlines(draw_labels=True, linewidth=1, color='gray', alpha=0.5, linestyle='--')  
    gl.xlabels_top = gl.ylabels_right = False  
  
    # 设置经纬度格式和刻度  
    ax.xaxis.set_major_formatter(LongitudeFormatter())  
    ax.yaxis.set_major_formatter(LatitudeFormatter())  
  
    # 绘制台风路径  
    for tc_num, group in df.groupby('tc_num'):  
        points = np.array(list(zip(group['lon'], group['lat'])))  
        x, y = points.T  
        color = get_color(group['grade'].iloc[-1])  # 使用最后一个强度级别作为颜色  
        ax.plot(x, y, color=color, marker='o', markersize=5, linestyle='-', linewidth=1, transform=ccrs.PlateCarree())  
  
    # 添加图例(这里需要手动指定,因为使用了循环绘制)  
    legend_elements = [  
    Line2D([], [], color='#FFFF00', marker='o', label='热带低压/扰动', markersize=5),  
    Line2D([], [], color='#6495ED', marker='o', label='热带风暴', markersize=5),  
    Line2D([], [], color='#3CB371', marker='o', label='强热带风暴', markersize=5),  
    Line2D([], [], color='#FFA500', marker='o', label='台风', markersize=5),  
    Line2D([], [], color='#FF00FF', marker='o', label='强台风', markersize=5),  
    Line2D([], [], color='#DC143C', marker='o', label='超强台风', markersize=5),  
]  
    ax.legend(handles=legend_elements, loc='upper left')  
  
    # 设置标题  
    plt.title('台风路径')  
  
    # 显示地图  
    plt.show()  
  
# 调用函数  
plot_typhoons(df, extent=[100, 180, 0, 40])  # 根据需要设置extent
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值