利用windrose绘制风玫瑰图并解决错误问题

绘制一个风玫瑰图

导入所需库

from windrose import WindroseAxes
import matplotlib.pyplot as plt
import matplotlib.cm as cm

绘制玫瑰图

axes = WindroseAxes.from_ax()
plt.rcParams['font.sans-serif'] = ['SimHei']#解决中文乱码
wd = [0]#风向0
ws = [2]#风速2
axes.bar(wd, ws, normed=True, opening=0.8, edgecolor='#b5b5c8', cmap = cm.get_cmap(name='bwr'))
axes.set_legend()#添加图例
plt.show()

代码中axes.bar()前两位参数为风向和风速,后面各个参数含义可自行查询文档,意义不大,照作者的抄就可以了

图中可即风玫瑰图,但发现两个问题,第一0°位置没有在正北,第二作者给的风向是0°,但实际却显示在的90°的位置。先解决第一个问题

使0°和正北对应

axes.set_theta_zero_location('N')
axes = WindroseAxes.from_ax()
plt.rcParams['font.sans-serif'] = ['SimHei']#解决中文乱码
wd = [0]#风向0
ws = [2]#风速2
axes.bar(wd, ws, normed=True, opening=0.8, edgecolor='#b5b5c8', cmap = cm.get_cmap(name='bwr'))
axes.set_theta_zero_location('N')#改变0°位置
axes.set_legend()#添加图例
plt.show()


图中0°位置以调整完毕
但发现角度沿逆时针方向分部,与我们日常习惯不同

axes.set_theta_direction(-1)


自此,角度坐标轴调整完毕

解决风向与坐标轴不匹配的问题

经作者测试,风向90°会被显示在0°,风向270°会被显示在180°,显示角度和实际风向存在一个沿45°(225°)方向轴对称的情况,所以,对实际风向在画图前做一个预处理。

#角度转化函数
def wind_direction_change(wd):wind_direction = np.array(wd)wind_direction[np.where((wind_direction >= 0)&(wind_direction <= 135))[0]] = 90 - wind_direction[np.where((wind_direction >= 0)&(wind_direction <= 135))[0]]wind_direction[np.where((wind_direction >= 315)&(wind_direction < 360))[0]] = 90 - wind_direction[np.where((wind_direction >= 315)&(wind_direction < 360))[0]]wind_direction[np.where((wind_direction > 135)&(wind_direction < 315))[0]] = 450 - wind_direction[np.where((wind_direction > 135)&(wind_direction < 315))[0]]wind_direction[np.where(wind_direction < 0)[0]] = 360 + wind_direction[np.where(wind_direction < 0)[0]]return wind_direction
axes = WindroseAxes.from_ax()
plt.rcParams['font.sans-serif'] = ['SimHei']#解决中文乱码
wd = [0]#风向0
ws = [2]#风速2
wd_new = wind_direction_change(wd)
axes.bar(wd_new, ws, normed=True, opening=0.8, edgecolor='#b5b5c8', cmap = cm.get_cmap(name='bwr'))
axes.set_theta_zero_location('N')
axes.set_theta_direction(-1)
axes.set_legend()#添加图例
plt.show()


自此风玫瑰图的正确画法介绍完毕,下面是作者封装好的函数,大家拿来用就可以了,也可以自己做相应的修改

完整代码

from windrose import WindroseAxes
import matplotlib.pyplot as plt
import matplotlib.cm as cm
import numpy as np#角度预处理函数,用来画准确的风向
def wind_direction_change(wd):wind_direction = np.array(wd)wind_direction[np.where((wind_direction >= 0)&(wind_direction <= 135))[0]] = 90 - wind_direction[np.where((wind_direction >= 0)&(wind_direction <= 135))[0]]wind_direction[np.where((wind_direction >= 315)&(wind_direction < 360))[0]] = 90 - wind_direction[np.where((wind_direction >= 315)&(wind_direction < 360))[0]]wind_direction[np.where((wind_direction > 135)&(wind_direction < 315))[0]] = 450 - wind_direction[np.where((wind_direction > 135)&(wind_direction < 315))[0]]wind_direction[np.where(wind_direction < 0)[0]] = 360 + wind_direction[np.where(wind_direction < 0)[0]]return wind_direction#画风玫瑰图
def drow_windrose(wd,ws):axes = WindroseAxes.from_ax()#生成玫瑰图类plt.rcParams['font.sans-serif'] = ['SimHei']#解决中文乱码#该循环用于剔除静风C的情况,由于需要从猴年往前剔除,防止列表出错for i in range(len(wd)-1,-1,-1):if wd[i] == 'c' and ws[i] == 0:wd.remove('c')ws.remove(0)wd_new = wind_direction_change(wd)#改变角度axes.bar(wd_new, ws, normed=True, opening=0.8, edgecolor='#b5b5c8', cmap = cm.get_cmap(name='bwr'))#画图axes.set_theta_zero_location('N')#设置正北axes.set_theta_direction(-1)#改变显示的角度顺序axes.set_legend()#添加图例plt.show()if __name__ == '__main__':wind_speed = [6,4,4,3,4,2,6,1,1,2,1,2,1,2,1,1,1,1,0,0,0,1,0,1]wind_direction  =  [340,110,90,110,180,130,350,30,230,260,240,240,230,210,200,250,250,230,'c','c','c',100,'c',250]drow_windrose(wind_direction,wind_speed)

风玫瑰图解释


该风玫瑰图以16个方位来画风向,风速用颜色表示,圈刻度代表所占百分比,如图所示东北方向风1-2.8m/s的占比15%左右,2.8-4.6m/s的占比15%左右,这里的占比是指所有风向的占比,所有颜色加起来为100%,东北方向风向总共占比33.3%

利用windrose绘制风玫瑰图并解决错误问题相关推荐

  1. 利用Plotly绘制各类图表

    利用Plotly绘制各类图表 Plotly部分 Plotly的安装 检查是否安装成功 利用Plotly绘制第一张图 尝试大量数据的绘制 利用go.Scatter存放数据 调取go.Scatter数据绘 ...

  2. 利用Python绘制 3D 体素色温图

    简 介: 测试了Matplotlib中的 体素绘制函数 voxels() ,但是无论是在 AI Studio中执行,还是直接在本地执行,都会出了错误.也就是无法通过 gca(projection='3 ...

  3. 利用 CoreGraphics 绘制折线图

    效果与元素分析 实现效果图如下: 首先对折线图进行元素分割 包含以下六部分元素 渐变背景 折线 折线上的点 折线范围内渐变 参考线 文本显示的 Label 除了6之外,其他几个元素都在 draw(_: ...

  4. 利用好手头的资源解决海量语料资源收集以及利用哈工大的LTP云平台解决依存句法和语义依存分析

    一.利用好手头的资源解决海量语料资源 基于语料做机器学习需要海量数据支撑,如何能不存一点数据获取海量数据呢?我们可以以互联网为强大的数据后盾,搜索引擎为我们提供了高效的数据获取来源,结构化的搜索结果展 ...

  5. python神奇时钟项目_怎么在Python项目中利用Pygame绘制一个时钟

    怎么在Python项目中利用Pygame绘制一个时钟 发布时间:2020-11-30 14:24:30 来源:亿速云 阅读:54 作者:Leah 怎么在Python项目中利用Pygame绘制一个时钟? ...

  6. 电脑启动计算机无法启动 修复工具栏,如何利用Win7启动修复功能解决电脑启动进不了系统的问题...

    如何利用Win7启动修复功能解决电脑启动进不了系统的问题 腾讯视频/爱奇艺/优酷/外卖 充值4折起 电脑就像人一样,时常会生点"小病",闹闹"罢工".在所有电脑 ...

  7. html5 canvas 椭圆,html5中怎么利用Canvas绘制椭圆

    html5中怎么利用Canvas绘制椭圆 发布时间:2021-07-08 16:32:10 来源:亿速云 阅读:58 作者:Leah html5中怎么利用Canvas绘制椭圆,针对这个问题,这篇文章详 ...

  8. python画车辆轨迹图_如何利用 Python 绘制酷炫的 车辆轨迹 — 速度时空图?三维数据用二维图像呈现...

    说明:本文系交通攻城狮原创文章,如需转载请私信联系,侵权必究. 2020,第 30 期,编程笔记 建议直接阅读精编版:如何利用 Python 绘制酷炫的 车辆轨迹 - 速度时空图?三维数据用二维图像呈 ...

  9. html5绘制图形幸运大转盘,微信小程序利用canvas 绘制幸运大转盘功能

    小程序对 canvas api 跟h5的不太一致 ,所以这个搞的比较久,不多说,先贴代码 Page({ /** * 页面的初始数据 */ data: { awardsConfig: {}, resta ...

  10. 利用Origin绘制等高线颜色填充图:初步绘制与细化

    利用Origin绘制梯度填充图:初步绘制与细化 前言 一."等高线-颜色填充"图的初步绘制 1.数据表准备 1.1 新建工作簿 1.2 数据导入 2.绘制"等高线-颜色填 ...

最新文章

  1. Android 使用git 忽略文件
  2. Vijos P1848 记数问题【进制】
  3. Springboot 简单的定时器
  4. 史上最详细 最官方的 SpringBoot和SpringCloud的版本选择!!!! 绝对让你心服口服的版本选择方式!!!
  5. django mysql connector,MySQL Connector / Python作为Django引擎?
  6. aes加密算法_令你的文件安全有了新方法AES-256-GCM加密网站免费用
  7. python 爬虫 标签文本beautifullsoup_【Python爬虫】学习BeautifulSoup
  8. 小白学数据分析-----聚类分析理论之TwoSteps理论篇+实践篇
  9. Java 答疑:JDK 11(Java 11)之后没有 JRE 目录,环境用户变量配置的解决方法
  10. 多线程---ReentrantLock
  11. DFS走迷宫问题(非最短路径)
  12. python turtle工具箱_python 库之 turtle(图形绘制) 开启新的快乐源泉
  13. java 狗带风波_养狗风波作文
  14. android studio配置国内,Android studio配置国内镜像源
  15. 大厂员工涌入外包:中年失业,外包已是我最好的选择
  16. Postman汉化版本竟如此简单,全中文真香
  17. 中图杯获奖作品计算机组,我校代表队参加首届“中图杯”全国大学生先进制图技术与技能大赛取得优异成绩...
  18. 蓝牙资讯|Q2全球TWS耳机出货量排行出炉,蓝牙音频新技术将推出市场
  19. 新浪短网址API接口(3月15日更新)
  20. 分享在Linux下编译Android源代码并修改调试系统自带应用的方法

热门文章

  1. MTK刷机工具Flash_Tool部分4032错误解决办法
  2. “私域”和“会员制”有什么区别?
  3. 华泰证券人工智能系列(1):人工智能选股框架及经典算法简介
  4. C语言递归函数 计算学生年龄
  5. 【机器学习15】决策树模型详解
  6. Ubuntu16安装搜狗拼音输入法
  7. 程序员的最高境界:呆若木鸡
  8. 程序员能力的四个境界(转)
  9. win7计算器左移、右移操作
  10. 《北京市工作居住证》办理攻略