台风预报精度的每一次提升,背后都离不开先进技术与海量数据的支撑。中科天机台风数据集(TJ‑TC)基于全球‑区域一体化的数值天气模式,能够输出海平面气压、十米风场等台风关键要素。在此基础上,该数据集成套采用多模式多成员的超级集合模拟,并融合基于历史台风数据的人工智能算法,对模式预测结果进行动态误差修正——相当于为最终输出加上了“双保险”。这一数据集专门针对已命名的热带气旋(参考TCVitals数据库)进行精细化模拟,输出的内容涵盖未来路径走势、中心气压变化、最大风速量化,以及7级、10级风圈半径的详细刻画。从路径、强度到风圈半径,这是一套真正意义上的全维度、高精度集合模拟方案,对防灾减灾及相关行业的决策支持具有不言而喻的重要价值。
数据服务周期从热带气旋获得命名起,一直到停止编报为止。输出的数据文件中,包含了台风中心经纬度、中心海平面气压、最大十米风速、移动方向、移动速度,以及最大风速对应的风圈半径等一系列核心要素。

导入所需模块
import pandas as pd
读取台风预报数据
天机预报数据的信息密度非常高。除了基本的台风中心位置和强度指标(最低气压、最大风速),还包括移动方向、移动速度以及各象限风圈半径的预报结果。换句话说,拿到这份数据,就能拼接出台风当前状态、未来移动趋势以及强度变化的完整画像。
df = pd.read_csv("/home/mw/input/track1498/typhoon/2026052712/tc_WNP_JANGMI_track.csv', encoding='GB2312')
df.head()

绘制台风路径及风圈半径图
将数据直观显示在地图上,效果更为清晰。以下脚本可一次性叠加显示台风路径和对应的风圈半径。
!python plot_typhoon_track.py -i /home/mw/input/track1498/typhoon/2026052712/tc_WNP_JANGMI_track.csv --no-cross
[INFO] 读取数据: /home/mw/input/track1498/typhoon/2026052712/tc_WNP_JANGMI_track.csv
[INFO] 使用编码: gbk
[INFO] 读取了 40 个时次的数据
[INFO] 地图范围: 经度 122.1°E ~ 163.3°E, 纬度 5.2°N ~ 48.0°N
[OK] 图片已保存: typhoon_track.png

绘制气压、移速与风速联合图
仅看路径还不够,台风强度的演变趋势同样值得深入分析。利用双纵轴图将风速、移速和气压放在同一画面对比,能够一眼识别台风生命史中的关键节点——例如何时达到巅峰强度,何时开始衰减。
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from matplotlib.dates import datestr2num, DateFormatter
import pandas as pd
from matplotlib.ticker import MultipleLocator
plt.rcParams["font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_csv('/home/mw/input/track1498/typhoon/2026052712/tc_WNP_JANGMI_track.csv', encoding='GB2312')
df = df.dropna()
top = 80
time = list(df['time'])
pressure = list(df['最小海平面气压(百帕)'])
speed = list(df['最大十米风速(米/秒)'])
move_speed = list(df['移速(米/秒)'])
fig = plt.figure(figsize=(12, 6))
ax1 = fig.add_subplot(111)
p1, = ax1.plot_date(datestr2num(time), speed, 'o-', color = 'red', linewidth = 2, label = '风速', markersize=3)
p2, = ax1.plot_date(datestr2num(time), move_speed, 'o-', color = 'orange', linewidth = 2, label = '移速', markersize=3)
ax1.grid(True)
ax1.set_ylabel('速度(m/s)', fontsize = 12)
ax1.set_ylim(0,70)
labels = ax1.get_xticklabels()
ax1.get_yticklabels()
[label.set_fontsize(10) for label in labels]
plt.xticks(rotation=45)
ax2 = ax1.twinx()
ax2.set_ylabel('气压(hPa)', fontsize = 12)
p3, = ax2.plot_date(datestr2num(time), pressure, 'o-', color = 'blue', linewidth = 2, label = '气压', markersize=3)
ax2.xaxis.set_major_locator(mdates.HourLocator(byhour = range(24), interval = 12))
ax2.xaxis.set_major_formatter(DateFormatter('%m-%d %H'))
labels = ax2.get_xticklabels()
[label.set_rotation(45) for label in labels]
if max(max(move_speed),max(speed))<40:
ax1.set_ylim(0,40)
ax1.yaxis.set_major_locator(MultipleLocator(5))
top = 40
if min(pressure)>980:
ax2.set_ylim(980,1010)
ax2.yaxis.set_major_locator(MultipleLocator(5))
elif min(pressure)>940:
ax2.set_ylim(940,1010)
ax2.yaxis.set_major_locator(MultipleLocator(10))
elif min(pressure)>900:
ax2.set_ylim(900,1010)
ax2.yaxis.set_major_locator(MultipleLocator(15))
else:
ax2.set_ylim(860,1010)
labels = ax2.get_yticklabels()
[label.set_fontsize(10) for label in labels]
legend = plt.legend([p1,p2,p3], ['风速','移速','气压'], ncol = 3, loc = 1, fontsize = 14)
legend.get_frame().set_alpha(1)
legend.get_frame().set_facecolor('none')
legend.get_frame().set_edgecolor('none')
plt.title('最大风速:{:.1f}m/s 最低气压:{}hPa'.format(max(speed),int(min(pressure))), color='purple', loc='left', fontsize=14)
plt.show()

总结
从这份数据可以看出,中科天机的台风预报产品远不止提供一条轨迹线。台风强度指标(最低气压、最大风速)、移速与移向,乃至不同象限的风圈半径都完整打包在内。风圈数据的存在尤为关键——它让预报员和分析人员能够看清台风的空间结构,而不只是盯着路径点做判断。在评估台风实际影响范围时,这一维度信息的价值是实实在在的。

