我的编程空间,编程开发者的网络收藏夹
学习永远不晚

利用Python matplotlib绘制风能玫瑰图

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

利用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绘制风能玫瑰图内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

利用Python matplotlib绘制风能玫瑰图

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何利用Python matplotlib绘制风能玫瑰图

这篇文章主要介绍如何利用Python matplotlib绘制风能玫瑰图,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!概述在之前的风资源分析文章中,有提到过用widrose包来进行玫瑰图的绘制,目前的可视化绘图包有很
2023-06-14

怎么用python绘制立体玫瑰花

要使用Python绘制立体玫瑰花,可以使用matplotlib库和numpy库。下面是一个示例代码:```pythonimport numpy as npimport matplotlib.pyplot as plt# 设置参数a = 2b
2023-10-12

使用ECharts和Python接口绘制玫瑰图的步骤

使用ECharts和Python接口绘制玫瑰图的步骤,需要具体代码示例玫瑰图是一种直观展示数据分布的图表类型,在数据可视化中有着广泛的应用。本文将介绍如何使用ECharts和Python接口绘制玫瑰图,并给出相应的代码示例。步骤一:安装和导
使用ECharts和Python接口绘制玫瑰图的步骤
2023-12-18

使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码

绘制樱花的代码:```pythonimport turtle# 设置画布大小turtle.setup(800, 600)# 画樱花的枝干def draw_branch(branch_len):if branch_len > 3:# 设置画笔
2023-09-16

Android中使用Canvas绘制南丁格尔玫瑰图(Nightingale rose diagram)

南丁格尔玫瑰图 在常规图表中实在很惊艳,但我初看没看懂,一查原来南丁格尔这么伟大,确实值得尊敬。 再仔细研究了下这种图的构成,发现原来就是把柱形图的柱形换成了扇形图的半径来表示,当然,变种有好多,我这只是说我理解的这种。 知道了其构成方式后
2022-06-06

使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实现

以下是使用Python的turtle库绘制樱花、玫瑰和圣诞树的代码实现。樱花:```pythonimport turtledef draw_branch(branch_len):if branch_len > 3:if branch_len
2023-09-17

如何使用Python matplotlib绘制xkcd动漫风格的图表

这篇文章主要介绍如何使用Python matplotlib绘制xkcd动漫风格的图表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!XKCDxkcd是兰道尔·门罗(Randall Munroe)的网名,又
2023-06-29

如何利用python库matplotlib绘制不同的图表

这篇文章主要介绍如何利用python库matplotlib绘制不同的图表,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、绘制简单曲线图思路:通过3个坐标点,绘制曲线import matplotlib.pyplot
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录