使用WINDROSE库绘制固定坐标风玫瑰图时遇ValueError错误
解决风玫瑰图绘制错误及空白图问题
错误原因分析
ValueError: 'Fire' is not a valid value for name 是因为你使用的Fire配色方案不在windrose支持的colormap列表中。windrose依赖matplotlib的标准配色,'Fire'可能是matplotlib新版本或第三方扩展新增的,未被windrose兼容,换成官方支持的配色(如viridis、plasma、accent等)即可解决。
空白图排查与解决
空白图通常和数据有效性、绘图参数设置有关,按以下步骤处理:
1. 清理验证数据
确保你的DataFrame中:
direction列值在0-360度范围内,无NaN或异常值speed列值为非负数,无NaN或异常值
代码示例:
# 清理缺失值和异常数据 wind_df = wind_df.dropna(subset=['direction', 'speed']) wind_df = wind_df[(wind_df['direction'].between(0, 360)) & (wind_df['speed'] >= 0)]
2. 正确绘图代码
使用标准流程创建windrose坐标轴,并指定兼容的colormap,同时建议手动设置风速区间(bins参数),避免自动分组不合理导致的空白:
import pandas as pd from windrose import WindroseAxes import matplotlib.pyplot as plt # 创建风玫瑰图专用坐标轴 fig, ax = plt.subplots(subplot_kw={'projection': 'windrose'}) # 绘制风玫瑰图,指定兼容的colormap和风速区间 ax.bar( wind_df['direction'], wind_df['speed'], opening=0.8, cmap='viridis', # 换成windrose支持的配色 bins=[0, 2, 4, 6, 8, 10] # 根据你的数据调整风速区间 ) # 添加图例 ax.set_legend(title='Wind Speed (m/s)') # 显示图形 plt.show()
3. 额外注意事项
- ERA5的风向是气象风向(风的来向),windrose默认采用此规则,无需转换;如果是海洋学风向(去向),需将方向转换为
360 - direction - 若仍有空白,可检查数据量是否过少,或调整
bins区间匹配你的风速分布
内容的提问来源于stack exchange,提问作者António Manuel Lameira Gaspar
相关产品推荐
相关产品推荐

