利用Python绘制多种风玫瑰图

 更新时间:2022年05月08日 10:04:14   作者:蚂蚁ailing  
这篇文章主要介绍了利用Python绘制多种风玫瑰图,风玫瑰是由气象学家用于给出如何风速和风向在特定位置通常分布的简明视图的图形工具,下文绘制实现详情,需要的小伙伴可以参考一下

前言

风玫瑰是由气象学家用于给出如何风速和风向在特定位置通常分布的简明视图的图形工具。它也可以用来描述空气质量污染源。风玫瑰工具使用Matplotlib作为后端。

安装方式直接使用:

pip install windrose

导入模块

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.cm as cm
from math import pi
import windrose
from windrose import WindroseAxes, WindAxes, plot_windrose
from mpl_toolkits.axes_grid1.inset_locator import inset_axes
import cartopy.crs as ccrs
import cartopy.io.img_tiles as cimgt

读取数据

df = pd.read_csv("./sample_wind_poitiers.csv", parse_dates=['Timestamp'])
df = df.set_index('Timestamp')

计算风速的u、v分量

df['speed_x'] = df['speed'] * np.sin(df['direction'] * pi / 180.0)
df['speed_y'] = df['speed'] * np.cos(df['direction'] * pi / 180.0)

uv风速散点图(含透明度)

fig, ax = plt.subplots(figsize=(8, 8), dpi=80)
x0, x1 = ax.get_xlim()
y0, y1 = ax.get_ylim()
ax.set_aspect(abs(x1-x0)/abs(y1-y0))
ax.set_aspect('equal')
ax.scatter(df['speed_x'], df['speed_y'], alpha=0.25)
df.plot(kind='scatter', x='speed_x', y='speed_y', alpha=0.05, ax=ax)
Vw = 80
ax.set_xlim([-Vw, Vw])
ax.set_ylim([-Vw, Vw])

风玫瑰图(多种形式)

ax = WindroseAxes.from_ax()
ax.bar(df.direction.values, df.speed.values, bins=np.arange(0.01,10,1), cmap=cm.hot, lw=3)
ax.set_legend()

ax = WindroseAxes.from_ax()
ax.box(df.direction.values, df.speed.values, bins=np.arange(0.01,10,1), cmap=cm.hot, lw=3)
ax.set_legend()

plot_windrose(df, kind='contour', bins=np.arange(0.01,8,1), cmap=cm.hot, lw=3)

绘制特定月份风玫瑰图

def plot_month(df, t_year_month, *args, **kwargs):
    by = 'year_month'
    df[by] = df.index.map(lambda dt: (dt.year, dt.month))
    df_month = df[df[by] == t_year_month]
    ax = plot_windrose(df_month, *args, **kwargs)
    return ax
plot_month(df, (2014, 7), kind='contour', bins=np.arange(0, 10, 1), cmap=cm.hot)

plot_month(df, (2014, 8), kind='contour', bins=np.arange(0, 10, 1), cmap=cm.hot)

plot_month(df, (2014, 9), kind='contour', bins=np.arange(0, 10, 1), cmap=cm.hot)

绘制风速频率直方图

bins = np.arange(0,30+1,1)
bins = bins[1:]
plot_windrose(df, kind='pdf', bins=np.arange(0.01,30,1),normed=True)

在地图上绘制风玫瑰图

proj = ccrs.PlateCarree()
fig = plt.figure(figsize=(12, 6))
minlon, maxlon, minlat, maxlat = (6.5, 7.0, 45.85, 46.05)
main_ax = fig.add_subplot(1, 1, 1, projection=proj)
main_ax.set_extent([minlon, maxlon, minlat, maxlat], crs=proj)
main_ax.gridlines(draw_labels=True)
main_ax.add_wms(wms='http://vmap0.tiles.osgeo.org/wms/vmap0',layers=['basic'])
cham_lon, cham_lat = (6.8599, 45.9259)
passy_lon, passy_lat = (6.7, 45.9159)
wrax_cham = inset_axes(main_ax,
        width=1,
        height=1,
        loc='center',
        bbox_to_anchor=(cham_lon, cham_lat),
        bbox_transform=main_ax.transData,
        axes_class=windrose.WindroseAxes,

height_deg = 0.1
wrax_passy = inset_axes(main_ax,
        width="100%",
        height="100%",
        bbox_to_anchor=(passy_lon-height_deg/2, passy_lat-height_deg/2, height_deg, height_deg),
        bbox_transform=main_ax.transData,
        axes_class=windrose.WindroseAxes,
        )
wrax_cham.bar(df.direction.values, df.speed.values,bins=np.arange(0.01,10,1), lw=3)
wrax_passy.bar(df.direction.values, df.speed.values,bins=np.arange(0.01,10,1), lw=3)

for ax in [wrax_cham, wrax_passy]:
        ax.tick_params(labelleft=False, labelbottom=False)

最后:

这样绘制出来的风玫瑰看起来还是很漂亮的,并且也能够大大提高工作效率,对于那些科研人员是很有帮助的。代码以及图片效果就放在上面了。

相关文章

  • Python 数据筛选功能实现

    Python 数据筛选功能实现

    这篇文章主要介绍了Python 数据筛选,无论是在数据分析还是数据挖掘的时候,数据筛选总会涉及到,这里我总结了一下python中列表,字典,数据框中一些常用的数据筛选的方法,需要的朋友可以参考下
    2023-04-04
  • Python获取时间戳的几种方法详细示例

    Python获取时间戳的几种方法详细示例

    这篇文章主要给大家介绍了关于Python获取时间戳的几种方法,时间戳通常是一个字符序列,唯一地标识某一刻的时间,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-10-10
  • 利用Python开发微信支付的注意事项

    利用Python开发微信支付的注意事项

    如今支付的引入是很多互联网产品都需要的。为了让用户用着更方便快捷,集成像支付宝、微信支付这样的第三方支付也就成了常有的事。今天跟着小编就来看看微信支付开发中几个值得注意的地方,涉及代码之处均用 Python 编写。
    2016-08-08
  • PyQt5 窗口切换与自定义对话框的实例

    PyQt5 窗口切换与自定义对话框的实例

    今天小编就为大家分享一篇PyQt5 窗口切换与自定义对话框的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • python数字转对应中文的方法总结

    python数字转对应中文的方法总结

    在本篇文章里小编给大家分享的是一篇关于python数字转对应中文的方法总结内容,有兴趣的朋友们可以跟着猜尝试测试下。
    2021-08-08
  • Python小波变换去噪的原理解析

    Python小波变换去噪的原理解析

    这篇文章主要介绍了Python小波变换去噪,对于去噪效果好坏的评价,常用信号的信噪比(SNR)与估计信号同原始信号的均方根误差(RMSE)来判断,需要的朋友可以参考下
    2021-12-12
  • python中的对数log函数表示及用法

    python中的对数log函数表示及用法

    在本篇文章里小编给大家整理了一篇关于python中的对数log函数表示及用法,有需要的朋友们可以学习下。
    2020-12-12
  • Pytest使用fixture实现token共享的方法

    Pytest使用fixture实现token共享的方法

    同学们在做pytest接口自动化时,会遇到一个场景就是不同的测试用例需要有一个登录的前置步骤,登录完成后会获取到token,用于之后的代码中,本文给大家介绍Pytest使用fixture实现token共享的方法,感兴趣的朋友一起看看吧
    2023-11-11
  • python实现可变变量名方法详解

    python实现可变变量名方法详解

    在本篇文章里小编给大家整理了关于python实现可变变量名的相关知识点内容以及实例代码,需要的朋友们参考下。
    2019-07-07
  • Python yield生成器和return对比代码实例

    Python yield生成器和return对比代码实例

    这篇文章主要介绍了Python yield生成器和return对比代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04

最新评论