How to make a wind rose with Python - Tutorial

How to make a wind rose online with Hatari Utils - Tutorial

hatarilabs.com/ih-en/how-to-make-a-wind-rose-online-with-hatari-utils-tutorial

Python is a useful tool for data analysis but also for data representation and as a graphic tool. This is an applied tutorial for the representation of a wind rose with Python from wind speed and direction stored on an Excel spreadsheet. The tutorial explores the options of the library to represent windroses as bars, boxes, polygons or contours.

Homepage of the windrose library:

https://github.com/python-windrose/windrose

Input data

You can download the input data from this link.

Tutorial

Code

This is the Python code for the tutorial:

# Import the required packages
%matplotlib inline
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
import matplotlib.cm as cm
from math import pi
# Uncomment the following line in case you are missing those packages
# !pip install windrose openpyxl
from windrose import WindroseAxes

Open wind data from a Excel file

df = pd.read_excel('../Xls/Datos_Rosa_de_Vientos.xlsx')
df
ID VELOCIDAD DIRECCARD DIRECCION
0 E-01 1.3 SSW 202.5
1 E-01 1.3 SSW 202.5
2 E-01 1.3 SSW 202.5
3 E-01 1.3 SSW 202.5
4 E-01 2.2 SSE 157.5
5 E-01 1.8 SSE 157.5
6 E-01 2.2 SSE 157.5
7 E-01 3.1 SE 135.0
8 E-01 2.7 SE 135.0
9 E-01 2.2 SE 135.0
10 E-01 2.2 ESE 112.5
11 E-01 1.5 S 180.0
12 E-01 2.2 ESE 112.5
13 E-01 1.8 ESE 112.5
14 E-01 1.8 SE 135.0
15 E-01 2.2 S 180.0
16 E-01 2.7 SE 135.0
17 E-01 2.2 SE 135.0
18 E-01 1.3 SE 135.0
19 E-01 0.9 S 180.0
20 E-01 1.8 SE 135.0
21 E-01 1.8 ESE 112.5
22 E-01 1.3 SE 135.0
23 E-01 1.3 S 180.0
24 E-01 0.9 SE 135.0
25 E-01 0.9 SSE 157.5
26 E-01 0.9 SE 135.0
27 E-01 1.1 SSE 157.5

Representation of wind speed on the x and y axis

df['velocidad_x'] = df['VELOCIDAD'] * np.sin(df['DIRECCION'] * pi / 180.0)
df['velocidad_y'] = df['VELOCIDAD'] * np.cos(df['DIRECCION'] * pi / 180.0)
fig, ax = plt.subplots(figsize=(8, 8), dpi=80)
x0, x1 = ax.get_xlim()
y0, y1 = ax.get_ylim()
ax.set_aspect('equal')
df.plot(kind='scatter', x='velocidad_x', y='velocidad_y', alpha=0.35, ax=ax)
<AxesSubplot:xlabel='velocidad_x', ylabel='velocidad_y'>
output_6_1.png

Histogram of wind speed

df['VELOCIDAD'].hist(figsize=(10,6))
<AxesSubplot:>
output_8_1.png

Plot a windrose in bar mode

ax = WindroseAxes.from_ax()
ax.bar(df.DIRECCION, df.VELOCIDAD, normed=True, opening=0.8, edgecolor='white')
ax.set_legend()
<matplotlib.legend.Legend at 0x225328d49a0>
output_10_1.png

Plot a windrose in proportional box mode.

ax = WindroseAxes.from_ax()
ax.box(df.DIRECCION, df.VELOCIDAD, bins=np.arange(0, 8, 1))
ax.set_legend()
<matplotlib.legend.Legend at 0x22532a32430>
output_12_1.png

Plot a windrose in filled mode

ax = WindroseAxes.from_ax()
ax.contourf(df.DIRECCION, df.VELOCIDAD, bins=np.arange(0, 8, 1), cmap=cm.hot)
ax.set_legend()
<matplotlib.legend.Legend at 0x22532ae8790>
output_14_1.png

Plot a windrose in linear mode

ax = WindroseAxes.from_ax()
ax.contour(df.DIRECCION, df.VELOCIDAD, bins=np.arange(0, 8, 1), cmap=cm.hot, lw=3)
ax.set_legend()
<matplotlib.legend.Legend at 0x22532b58880>
output_16_1.png
8 Comments

Saul Montoya

Saul Montoya es Ingeniero Civil graduado de la Pontificia Universidad Católica del Perú en Lima con estudios de postgrado en Manejo e Ingeniería de Recursos Hídricos (Programa WAREM) de la Universidad de Stuttgart con mención en Ingeniería de Aguas Subterráneas y Hidroinformática.

 

Suscribe to our online newsletter

Subscribe for free newsletter, receive news, interesting facts and dates of our courses in water resources.