如何绘制标记颜色随强度变化的气旋轨迹?
实现气旋轨迹标记按强度着色的方案
你已经完成了基础的气旋轨迹绘制,接下来只需要把你定义的colors字典和气旋强度数据关联起来,就能实现按强度着色的标记了,具体可以这么做:
关键修改步骤
- 把每个气旋强度(
it数组里的每个值)映射到对应的颜色,生成一个颜色列表 - 修改
plt.scatter()的参数,用这个颜色列表来设置标记的颜色(可选择边缘色或填充色,根据你的需求调整) - 可选:添加图例,让不同颜色对应的强度等级更清晰
修改后的完整代码片段
llons, llats = np.meshgrid(lons, lats) x,y = map(llons,llats) plt.style.use('seaborn-white') clevels=[-1.6,-1.2,-0.8,-0.4,0.0,0.4,0.8] cs = map.contourf(x,y,plt_data,clevels,cmap=plt.cm.jet) map.colorbar(cs) ####################track########################## import pandas as pd df = pd.read_excel('E:/bst_trc.xls',sheet_name='1990') latitude = df.Latitude.values[0:25] longitude = df.Longitude.values[0:25] it = df.Grade.values[0:25] x,y = map(longitude, latitude) colors = {'SUCS':'red', 'ESCS':'blue', 'SCS':'green', 'D':'black','VSCS':'orange','DD':'cyan'} # 生成每个轨迹点对应的颜色列表,匹配强度等级 point_colors = [colors[grade] for grade in it] # 修改scatter参数,使用对应颜色作为标记边缘色(保持填充透明,不遮挡底图) plt.scatter(x,y, s=50, edgecolors=point_colors, facecolors='none', linewidth=2) plt.plot(x,y,'k',linewidth=1.5 ) # 可选:添加图例,直观展示强度与颜色的对应关系 from matplotlib.patches import Patch legend_elements = [Patch(facecolor=color, edgecolor=color, label=grade) for grade, color in colors.items()] plt.legend(handles=legend_elements, loc='upper right', title='Cyclone Grade') plt.show() # 记得添加显示图像的语句
细节说明
- 颜色映射逻辑:通过列表推导式
[colors[grade] for grade in it],把每个轨迹点的强度等级直接转换成你定义好的颜色,确保一一对应 - 标记样式调整:如果希望标记填充色也使用对应强度颜色,可以把
facecolors=point_colors,同时移除facecolors='none';保持空心标记的话,底图的气象数据不会被遮挡,更适合叠加展示 - 图例优化:用
Patch创建图例元素,让阅读者能快速理解不同颜色代表的气旋强度等级
这样修改后,你的轨迹标记就会根据气旋强度显示对应的颜色啦!
内容的提问来源于stack exchange,提问作者Debashis Paul




