Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Making a wind rose in pandas/matplotlib
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
@r-melo
Copy link

r-melo commented Apr 22, 2018

I ran across an issue. If my data don't have wind information in a specific direction the dataframe 'rose' ends with an incorrect number of rows, without any information for the missing directions. In order to plot it correctly you need rows for these directions filled with zeroes. I solved with this little code right after creating the 'rose' dataframe:

directions = np.arange(0, 360, 15)
for i in directions:
    if i not in rose.index:
        rose = rose.reindex(rose.index.values.tolist()+[i])

rose = rose.sort_index().fillna(0)

@Matthias84
Copy link

Matthias84 commented Feb 29, 2020

Hi thanks for this great example! I try to plot my weewx data, which is pretty similar table.

But plotting the rose throws an exception which I don't understand

ValueError: shape mismatch: objects cannot be broadcast to a single shape
...
ax.bar(bar_dir, rosedata[c1].values,
width=bar_width,
color=palette[0],
edgecolor='none',
label=c1,
linewidth=0)

Because I don't understand this part well enough, could you point me, if this rose object looks ok for you?

<class 'pandas.core.frame.DataFrame'>
CategoricalIndex: 25 entries, 0.0 to 360.0
Data columns (total 8 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   calm         25 non-null     float64
 1   0 - 5 m/s    25 non-null     float64
 2   5 - 10 m/s   25 non-null     float64
 3   10 - 15 m/s  25 non-null     float64
 4   15 - 20 m/s  25 non-null     float64
 5   20 - 25 m/s  25 non-null     float64
 6   25 - 30 m/s  25 non-null     float64
 7   >30 m/s      25 non-null     float64
dtypes: float64(8)
memory usage: 2.4 KB

@phobson
Copy link
Author

phobson commented Feb 29, 2020

@Matthias84 -- that's not enough info for me to provide manful advice. I recommend you look at cloudside, where I put all of this into a single function

@BDJensen
Copy link

BDJensen commented Jun 12, 2021

I'm getting:
sta = metar.WeatherStation('KPDX')
AttributeError: module 'metar' has no attribute 'WeatherStation'
..?

@phobson
Copy link
Author

phobson commented Jun 14, 2021

I'm getting:
sta = metar.WeatherStation('KPDX')
AttributeError: module 'metar' has no attribute 'WeatherStation'
..?

@BDJensen -- checkout https://github.com/geosyntec/cloudside -- that's where all of this stuff lives now. More to the point, the purpose of that section of code was to download the data. You can skip it and get the data anyway you want.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment