python3使用matplotlib绘制风速风向玫瑰图

Background

风玫瑰是由气象学家用于给出如何风速和风向在特定位置通常分布的简明视图的图形工具。

1、最终效果图

在这里插入图片描述

2、源码

import pandas as pd
import numpy as np

import matplotlib.pyplot as plt

# 设置字体格式
font = {
    'family': 'serif',
    'serif': 'Times New Roman',
    'weight': 'normal',
    'size': 10
}
plt.rc('font', **font)
plt.rc('axes.unicode_minus: False')


def plot_wind_rose():
    """绘制风速风向玫瑰图"""
    # 风速分布为16个方向
    columns = 'N NNE NE ENE E ESE SE SSE S SSW SW WSW W WNW NW NNW'.split()
    # 风速分 4 段,每列数据表示各方向风速的频数统计值
    datas = {
        '0~0.2': [0.32, 0.24, 0.21, 0.38, 0.35, 0.22, 0.06, 0.28, 0.43, 0.43, 0.18, 0.16, 0.19, 0.23, 0.08, 0.18],
        '0.3~1.5': [0.32, 0.38, 0.28, 0.08, 0.12, 0.29, 0.30, 0.32, 0.31, 0.19, 0.33, 0.49, 0.30, 0.18, 0.40, 0.35],
        '1.6~3.3': [0.24, 0.18, 0.07, 0.39, 0.34, 0.17, 0.40, 0.25, 0.07, 0.24, 0.24, 0.13, 0.10, 0.28, 0.41, 0.21],
        '3.4~5.4': [0.10, 0.18, 0.42, 0.13, 0.18, 0.29, 0.22, 0.13, 0.17, 0.12, 0.23, 0.19, 0.40, 0.30, 0.09, 0.25]
    }
    df = pd.DataFrame(data=np.array(list(datas.values())), index=list(datas.keys()), columns=columns)
    # 获取 16 个方向的角度值
    degrees = np.linspace(0, 2 * np.pi, len(columns), endpoint=False)
    # 绘制扇型的宽度,可以自行调整
    width = np.pi / len(columns)
    # 开始绘图
    plt.figure(figsize=(6, 6))
    ax = plt.subplot(111, projection='polar')
    for idx in df.index:
        # 每一行绘制一个扇形
        ax.bar(degrees, df.loc[idx], width=width, bottom=0.0, label=idx, tick_label=columns)
    # 设置零度方向北
    ax.set_theta_zero_location('N')
    # 逆时针方向绘图
    ax.set_theta_direction(-1)
    # plt.title('风速风向玫瑰图')
    # 将label显示出来, 并调整位置
    plt.legend(loc=4, bbox_to_anchor=(1.15, -0.07))
    plt.show()


def main():
    plot_wind_rose()


if __name__ == '__main__':
    main()

3、另一种方式可以使用 windrose模块绘制

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 5
    点赞
  • 52
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WaiSaa

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值