
中科天机台风数据(TJ-TC)依托中科天机全球-区域一体化数值天气模式,提供海平面气压、十米风场等高分辨率台风关键要素,并结合多模式多成员超级集合模拟与历史台风数据的人工智能算法订正技术,对模式误差进行动态校正。该数据集面向已命名热带气旋(可参考TCVitals数据库),开展专业化台风模拟,通过对未来位置和移动轨迹的预估、中心气压与最大风速的量化分析,以及7级、10级等风圈范围的精细化刻画,科学描述台风未来发展趋势,具备高精度、稳定可靠的路径、强度及风圈半径全维度精细化集合模拟能力,为防灾减灾和相关行业决策提供坚实的数据支持。
中科天机台风数据(TJ-TC)对已命名热带气旋启动台风模拟数据服务,持续至该热带气旋停止编报。数据文件包含台风中心纬度、台风中心经度、台风中心海平面气压、台风最大十米风速、台风移动方向、台风移动速度、最大风速风圈半径等要素模拟。

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()

