利用Python matplotlib绘制风能玫瑰图

 更新时间:2021年03月26日 09:23:37   作者:加油学习和努力赚钱的猪妈咪  
这篇文章主要给大家介绍了关于如何利用Python matplotlib绘制风能玫瑰图的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

概述

在之前的风资源分析文章中,有提到过用widrose包来进行玫瑰图的绘制,目前的可视化绘图包有很多,但是最基础和底层的,本人认为还是matplotlib,有时候为了画1-2个图就去安装一个包,好麻烦,我就是个安装软件的渣渣,所以,推己及人,我也研究了一下,matplotlib画玫瑰图的方法,废话不多说,开始咯~~~

风能玫瑰图

玫瑰图是气象科学专业统计图表,用来统计某个地区一段时期内风向、风速发生频率,又分为“风向玫瑰图”和“风速玫瑰图”。本文中的玫瑰图是将风速和风向结合在一起,画出的风能玫瑰图。

读取数据

读取对应的测风数据,并进行数据的基本计算,在matplotlib中画图中没有集成的计算包,所以一定要充分了解绘制玫瑰图的原理,将数据通过计算来处理成绘图需要的形式,再进行调用绘图。

**1、读取数据,**并提取出绘图的风速风向数据,此时的数据是原始风速风向数据。

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import matplotlib as mpl

plt.rcParams['font.sans-serif']=['SimHei'] #显示中文
plt.rcParams['axes.unicode_minus']=False #显示负号

filename=r'E:\python总结\实例数据\matplotlib画玫瑰图\Sta_WLS7-4880-0420-0728.xlsx'
datat=pd.read_excel(filename,sheet_name='原始数据')
datat.columns

# 提取绘图的风速风向数据,并进行简单的删除空值处理
dt=datat.loc[:,('90m Wind Speed (m/s)','90m Wind Direction (�)')] #提取90m高度的风速和风向
dt=dt.dropna() #删除空值

2、进行绘图前的数据计算。

mx=np.ceil(max(dt['90m Wind Speed (m/s)'])) #风速最大值向上取整

ct0=np.array(np.arange(0,361,22.5)) #划分风向的区间,22.5度一个区间
ct1=np.array(np.arange(0,mx+2,2)) #划分风速的区间,2米一个区间

#将风速和风向进行区间划分
dt['wd']=pd.cut(dt['90m Wind Direction (�)'],ct0) 
dt['ws']=pd.cut(dt['90m Wind Speed (m/s)'],ct1) 

#计算各区间段数据量,输出结果为层次化索引序列
count=dt['90m Wind Speed (m/s)'].groupby([dt['ws'],dt['wd']]).count() 
data=count.unstack() #将层次化索引转化为表格

3、绘制玫瑰图与颜色条。

根据上面计算的数据data来进行绘图。

n=16 #绘制的扇区的个数,与上面角度的区间划分一致的
theta=np.linspace(0,2*np.pi,n,endpoint=False) #获取16个方向的角度值
width=np.pi*1.5/n #设置扇形的宽度
#设置角度对应的标签
labels=list(['N','','45','','E','','135','','S','','225','','W','','315',''])

fig=plt.figure() #新建画布
ax=fig.add_axes([0.1,0.1,0.7,0.7],projection='polar') #在画布添加一个极坐标图,即玫瑰图
ax1=fig.add_axes([0.8,0.1,0.03,0.7]) #在画布里面添加颜色条,分别对应左,下,宽,高

#根据划分的风速段个数来进行颜色配置
colors=['blue','orange','forestgreen','tomato','violet','red','m','yellow','gray'] 
cmap=mpl.colors.ListedColormap(colors)
norm=mpl.colors.BoundaryNorm(ct1,cmap.N)

for i in range(0,len(data.index)):
 idx=data.index[i]
 rad=data.loc[idx]
 #画玫瑰柱状图,由此类推,可以画雷达图,气泡图等等,只要将bar改成对应的图就可以
 ax.bar(theta,rad,width=width,bottom=100,label=idx,tick_label=labels,color=colors[i]) 
 
ax.set_theta_zero_location('N') #设置0度正北方向
ax.set_theta_direction(-1) #设置顺时针方向绘图
ax.set_title('风玫瑰图',fontsize=16)
ax.tick_params(labelsize=15) 
ax.set_yticks([200,500,1000,1500]) #默认的y轴出现的频数,也可设置为空
cb=mpl.colorbar.ColorbarBase(ax1,cmap=cmap,norm=norm) #设置颜色条
cb.ax.tick_params(labelsize=14) #设置颜色条字体和大小

得到风玫瑰柱状图如下:

将里面:

ax.bar(theta,rad,width=width,bottom=100,label=idx,tick_label=labels,color=colors[i])

替换成:

ax.fill(theta,rad,alpha=0.5,color=colors[i])

得到风能面积图,不过由于本次数据覆盖严重,比较丑:

简单的风向玫瑰图

在实际运用中,有时候并不需要很复杂的玫瑰图,简单的表示各风向上的风速出现频次就可以了,因此,可以画简单的风向玫瑰图。

data_0=dt['90m Wind Speed (m/s)'].groupby(dt['wd']).count() #计算每一个风向段的风速频次

ax=plt.subplot(111,projection='polar') #建立极坐标系
bars=ax.bar(theta,data_0,width=width,bottom=0.0)

#为每个柱子配颜色,有两种方法,一种是一个柱子设置一个颜色,根据柱子的个数设置颜色的个数
#另一种是用连续色彩的映射,第二种方法需要将画图数据归一化到0-1之间
mm=max(data_0)
for r,bar in zip(data_0,bars):
 bar.set_facecolor(plt.cm.viridis(r/mm)) #设置数值映射的颜色
 bar.set_alpha(0.8) #设置颜色透明度
 
ax.set_theta_zero_location('N') #设置0度正北方向
ax.set_theta_direction(-1) #设置顺时针方向绘图
ax.set_title('风向玫瑰图',fontsize=16)
ax.tick_params(labelsize=13) 
ax.set_yticks([500,1000,2000,4000]) #默认的y轴出现的频数,也可设置为空

得到如下图:

由于风向数据的特征很明显,即主要风向明确,所以图画出来不太好看。

以上为matplotlib画玫瑰图的用法,另外还有一些衍生的玫瑰图,大家可以据此摸索一下。

总结

到此这篇关于利用Python matplotlib绘制风能玫瑰图的文章就介绍到这了,更多相关matplotlib绘制风能玫瑰图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python实现Keras搭建神经网络训练分类模型教程

    Python实现Keras搭建神经网络训练分类模型教程

    这篇文章主要介绍了Python实现Keras搭建神经网络训练分类模型教程,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python中sample函数的介绍与使用

    python中sample函数的介绍与使用

    sample()函数常用来随机获取dataFrame中数据,可以用于快速查看,下面这篇文章主要给大家介绍了关于python中sample函数的介绍与使用的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • 利用Python如何生成hash值示例详解

    利用Python如何生成hash值示例详解

    这篇文章主要给大家介绍了关于利用Python如何生成hash值的相关资料,并且给大家分享了利用Python一句话校验软件哈希值的方法,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-12-12
  • django2 快速安装指南分享

    django2 快速安装指南分享

    下面小编就为大家分享一篇django2 快速安装指南分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Python挑选文件夹里宽大于300图片的方法

    Python挑选文件夹里宽大于300图片的方法

    这篇文章主要介绍了Python挑选文件夹里宽大于300图片的方法,实例分析了Python中PIL库的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • pycharm通过anaconda安装pyqt5的教程

    pycharm通过anaconda安装pyqt5的教程

    PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,这篇文章主要介绍了pycharm通过anaconda来安装pyqt5的教程,需要的朋友可以参考下
    2020-03-03
  • 吴恩达机器学习练习:神经网络(反向传播)

    吴恩达机器学习练习:神经网络(反向传播)

    这篇文章主要介绍了学习吴恩达机器学习中的一个练习:神经网络(反向传播),在这个练习中,你将实现反向传播算法来学习神经网络的参数,需要的朋友可以参考下
    2021-04-04
  • python中浮点数比较判断!为什么不能用==(推荐)

    python中浮点数比较判断!为什么不能用==(推荐)

    这篇文章主要介绍了python中浮点数比较判断!为什么不能用==,本文给大家分享问题解决方法,需要的朋友可以参考下
    2023-09-09
  • 深度学习中shape[0]、shape[1]、shape[2]的区别详解

    深度学习中shape[0]、shape[1]、shape[2]的区别详解

    本文主要介绍了深度学习中shape[0]、shape[1]、shape[2]的区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • python使用numpy中的size()函数实例用法详解

    python使用numpy中的size()函数实例用法详解

    在本篇文章里小编给整理的是一篇关于python使用numpy中的size()函数实例用法详解内容,有兴趣的朋友们可以学习下。
    2021-01-01

最新评论