前言

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

风玫瑰工具使用Matplotlib作为后端。

安装方式直接使用pip install windrose

导入模块


Python学习交流Q群:906715085####
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绘制多种风玫瑰图相关推荐

  1. python画树叶-手把手|如何用Python绘制JS地图?

    原标题:手把手|如何用Python绘制JS地图? 关于转载授授权 大数据文摘作品,欢迎个人转发朋友圈,自媒体.媒体.机构转载务必申请授权,后台留言"机构名称+文章标题+转载",申请 ...

  2. 用python绘制柱状图标题-如何用Python绘制3D柱形图

    本文主要讲解如何使用python绘制三维的柱形图,如下图 源代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2 ...

  3. python获取excel数据制作有文字和图表的报告_如何用Python绘制学术报告图表?

    原标题:如何用Python绘制学术报告图表? 作者:ExcelTing 原文:http://cnblogs.com/excelting/p/6507680.html 全文约 3581 字,读完可能需要 ...

  4. python均线选股_python选股模型均线,已知股票数据,如何用Python绘制k线日对应数据...

    Q1:已知股票数据,如何用Python绘制k线日对应数据 我没遇到过 只是自己写过 有点经验 先确定时间片 然后再把tick插入就行了 Q2:使用python实现ema(指数移动平均的计算) a =  ...

  5. python三维柱形图_如何用Python绘制3D柱形图

    本文主要讲解如何使用python绘制三维的柱形图,如下图 源代码如下: import numpy as np import matplotlib.pyplot as plt from mpl_tool ...

  6. 如何用Python绘制曲线——turtle画小鱼化石的实践篇

    turtle绘制曲线的方法很多,除了大家常用的"一步一拐法",用抛物线公式来绘制曲线也十分方便.(对"一步一拐法"感兴趣的童鞋可参考博文 <如何用Pyth ...

  7. 用python画小猪佩奇的编码_如何用python绘制小猪佩奇-python绘图教程图文讲解

    原标题:如何用python绘制小猪佩奇-python绘图教程图文讲解 如何运用python来绘制小猪佩奇呢?通过几道简单的python代码即可让你绘制出小猪佩奇,话不多说,直接上代码. 用python ...

  8. 如何用Python绘制深小卫推文中的病例图

    如何用Python绘制深小卫推文中的病例图 前面的文章介绍了如何用Python绘制南丁格尔玫瑰图,链接:循序渐进,学会用pyecharts绘制玫瑰图 南丁格尔玫瑰图最初被用于统计军医数据,现在也常用于 ...

  9. python画企鹅_相信你也可以,一文学会如何用Python绘制分块图

    最近咱们一直在聊Python的相关东东,有朋友私信问我能否聊一下其他编程语言的,比如Java相关的内容,其他编程语言咱们后面会聊哦,前期咱们先把Python相关的实用技能给讲清楚哦! 好啦,今天咱们继 ...

  10. 如何用Python绘制圣诞树(极其鬼畜视频) - B站小视频

    如何用Python绘制圣诞树(极其鬼畜视频)

最新文章

  1. 进程特征码遍历VC版
  2. LA3942 Remember the Word(Trie+DP)
  3. 索尼游戏手柄SP2的开发体会
  4. Flask学习 一 基本结构
  5. 广州市岑村教练场考科目二,惊险通过,经验总结
  6. windows hosts 作用以及常见问题解决
  7. DB2数据库用 With语句分隔字符
  8. 八个小技巧教你做出舒服的MG动画
  9. 【C++程序设计实践】实验十一
  10. apache-hive-3.1.0-bin.tar.gz 下载
  11. 基于Python的语音识别控制系统
  12. 合金电阻分类与合金电阻详细参数介绍
  13. 仪器检定是为了满足什么需求?为什么不直接全部校准或检定呢?
  14. chromecast协议_如何将Chromecast用作快速信息仪表板
  15. onvif 客服端鉴权
  16. 多线程开发实战:Java实现多线程四种方式及相关方法原理
  17. AP微观和宏观经济学考察重点分析
  18. Opencv实现停车位识别
  19. 传智播客推出少儿教育品牌-酷丁鱼
  20. java 案例写作_用Java编写一个银行转账案例

热门文章

  1. Windows下删除文件夹提示找不到该项目,请确认该项目的位置,然后重试。
  2. 神经网络算法的基本原理,神经网络算法都有哪些
  3. C#制作单机版桌面软件(带数据库)
  4. ApiPost使用教程
  5. mikrotik固件升级
  6. LabVIEW FPGA PCIe开发讲解-实战篇:实验61:PCIe DMA+8位ADC(模拟数据采集卡)
  7. HTML5全套视频教程合集分享-2018年千锋最新录制
  8. Vieux-部分型号iPhone\iPad\iPod降级工具使用教程
  9. 需求分析-业务需求、用户需求、功能需求
  10. ATX电源的工作原理