matplotlib绘制四季风玫瑰子图出现AttributeError及空白图问题求助
问题说明
你想要在同一张画布上绘制一年四个季节的风玫瑰子图,参考相关方法编写代码后运行报错AttributeError: 'Rectangle' object has no property 'normed',且仅输出四张空白散点图,无法生成目标风玫瑰图,核心原因有两点:
- 坐标轴类型不匹配:
plt.subplots()默认生成普通笛卡尔坐标系坐标轴,仅支持常规图表参数,无法识别风玫瑰图专属的normed、nsector等参数,调用普通bar方法就会触发属性不存在的报错 - 变量覆盖问题:你先声明的
WindroseAxes对象被后续plt.subplots()返回的普通坐标轴数组直接覆盖,完全没有生效
修正后的可运行代码
import numpy as np import matplotlib.pyplot as plt from matplotlib import cm from windrose import WindroseAxes # 此处省略你的df读取和日期时间索引设置代码 df = df.between_time('8:00', '21:00') # 筛选白天数据 # 季节筛选改为正向筛选,逻辑更清晰不易出错 spring = df[df.index.month.isin([3,4,5])] summer = df[df.index.month.isin([6,7,8])] fall = df[df.index.month.isin([9,10,11])] winter = df[df.index.month.isin([1,2,12])] ws_list = [spring.ws_5408, summer.ws_5408, fall.ws_5408, winter.ws_5408] wd_list = [spring.dir_5408, summer.dir_5408, fall.dir_5408, winter.dir_5408] season_names = ['春季', '夏季', '秋季', '冬季'] # 关键:创建子图时指定投影类型为windrose,生成风玫瑰专属坐标轴 fig, axes = plt.subplots(2, 2, subplot_kw={'projection': 'windrose'}, figsize=(12,10)) axes = axes.flatten() # 展平2x2坐标轴数组,方便循环处理 for i in range(4): axes[i].bar(wd_list[i], ws_list[i], normed=True, opening=0.8, edgecolor='white', bins=np.arange(0, 15, 3), cmap=cm.rainbow, nsector=20) axes[i].set_title(season_names[i], fontsize=14) # 统一添加图例 axes[-1].set_legend(decimal_places=1, units='m/s', fontsize='x-large', loc='best') plt.tight_layout() # 自动调整子图间距避免遮挡 plt.show()
补充说明
如果运行时仍提示normed参数不存在,可以将代码中normed=True替换为density=True,适配不同版本的windrose库。
内容的提问来源于stack exchange,提问作者obscuredbyclouds
相关产品推荐
相关产品推荐

