绘制2023年十一号台风海葵路径图
import matplotlib.pyplot as plt
import mpl_toolkits.basemap as bm
from mpl_toolkits.basemap import Basemap
plt.rcParams['font.sans-serif'] = ['SimHei']
import pandas as pd
# 读取 Excel 文件
file_path = '2023-11号台风海葵.xlsx' # 替换为你的文件路径
df = pd.read_excel(file_path)
# 提取经度(lon)列中的数字
lon_column = 'lon' # 替换为你的经度列名称
df['lon'] = pd.to_numeric(df['lon'], errors='coerce')
# 提取纬度(lat)列中的数字
lat_column = 'lat' # 替换为你的纬度列名称
df['lat'] = pd.to_numeric(df['lat'], errors='coerce')
# 提取中心风力(wind_speed)列中的数字
wind_speed_column = 'wind_speed' # 替换为你的中心风力列名称
df['wind_speed'] = pd.to_numeric(df['wind_speed'], errors='coerce')
# 显示处理后的数据
# print(df[['lon', 'lat', 'wind_speed']])
# 过滤非数值(空缺数)的行
df = df.dropna(subset=['lon', 'lat', 'wind_speed'])
# 提取所有风速范围的数据
all_data = df.copy()
'''
中心风力分级
热带低压6~7 热带风暴8~9
强热带风暴10~11 台风12~13
强台风14~15 超强台风16~
'''
# 提取不同风速范围的数据
wind_6_7 = df[(df['wind_speed'] >= 6) & (df['wind_speed'] <= 7)]
wind_8_9 = df[(df['wind_speed'] >= 8) & (df['wind_speed'] <= 9)]
wind_10_11 = df[(df['wind_speed'] >= 10) & (df['wind_speed'] <= 11)]
wind_12_13 = df[(df['wind_speed'] >= 12) & (df['wind_speed'] <= 13)]
wind_14_15 = df[(df['wind_speed'] >= 14) & (df['wind_speed'] <= 15)]
wind_16_above = df[df['wind_speed'] >= 16]
#绘制basemap
cm = bm.Basemap(llcrnrlon=104,llcrnrlat=12,urcrnrlon=150,urcrnrlat=30)
fig =plt.figure(figsize=[12,8],dpi=500)
lon_all, lat_all = cm(all_data['lon'].values, all_data['lat'].values)
# 将经纬度转换为地图坐标
lon_6_7, lat_6_7 = cm(wind_6_7['lon'].values, wind_6_7['lat'].values)
lon_8_9, lat_8_9 = cm(wind_8_9['lon'].values, wind_8_9['lat'].values)
lon_10_11, lat_10_11 = cm(wind_10_11['lon'].values, wind_10_11['lat'].values)
lon_12_13, lat_12_13 = cm(wind_12_13['lon'].values, wind_12_13['lat'].values)
lon_14_15, lat_14_15 = cm(wind_14_15['lon'].values, wind_14_15['lat'].values)
lon_16_above, lat_16_above = cm(wind_16_above['lon'].values, wind_16_above['lat'].values)
# 绘制散点图和连线
plt.plot(lon_all, lat_all,c='red', linewidth=0.5,zorder=1)
#---------------------------------
plt.scatter(lon_6_7, lat_6_7, s=19, c='green', marker='o', edgecolors='white', linewidth=0.5, label='6-7级',zorder=2)
plt.scatter(lon_8_9, lat_8_9, s=19, c='blue', marker='o', edgecolors='white', linewidth=0.5, label='8-9级',zorder=2)
plt.scatter(lon_10_11, lat_10_11, s=19, c='yellow', marker='o', edgecolors='white', linewidth=0.5, label='10-11级',zorder=2)
plt.scatter(lon_12_13, lat_12_13, s=19, c='orange', marker='o', edgecolors='white', linewidth=0.5, label='12-13级',zorder=2)
plt.scatter(lon_14_15, lat_14_15, s=19, c='purple', marker='o', edgecolors='white', linewidth=0.5, label='14-15级',zorder=2)
plt.scatter(lon_16_above, lat_16_above, s=19, c='red', marker='o', edgecolors='white', linewidth=0.5, label='>=16级',zorder=2)
cm.bluemarble()
plt.title("台风海葵路径图\nblue:风强>=8级 yellow:风强>=10级\norange:风强>=12级 purple:风强>=14级\nred:风强>=16级",fontsize=15)
#保存绘图
outputfilename=r'海葵路径显示.png'
fig.savefig(outputfilename)
结果如下