-
-
Save OneGneissGuy/ef9de987b1b85e3dfdbd803ca2ce255d to your computer and use it in GitHub Desktop.
Parse Raw NDBC Directional Wave Spectra
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import urllib.request as request | |
import json | |
import matplotlib.pyplot as plt | |
import matplotlib.colors as colors | |
import matplotlib.cm as cm | |
import numpy as np | |
class BuoySpectraPlotter: | |
def __init__(self, buoy_station): | |
self.data = None | |
self.buoy_station = buoy_station | |
def fetch_data(self): | |
url = 'https://buoyfinder.appspot.com/api/latest/wave/' + self.buoy_station | |
req = request.Request(url) | |
with request.urlopen(req) as response: | |
self.data = json.loads(response.read().decode('utf8')) | |
return self.data is not None | |
def plot_radar(self): | |
if self.data is None: | |
return | |
frequencies = np.array(self.data['BuoyData']['WaveSpectra']['Frequencies']) | |
energies = np.array(self.data['BuoyData']['WaveSpectra']['Energies']) | |
angles = np.array(self.data['BuoyData']['WaveSpectra']['Angles']) * (np.pi/180.0) | |
ax = plt.subplot(111, projection='polar') | |
ax.set_title('Station ' + self.buoy_station + ': Directional Wave Spectra\n') | |
ax.set_theta_zero_location('N') | |
ax.set_theta_direction(-1) | |
bars = ax.bar(angles, energies, align='center') | |
# Map the color of each bar in the plot to its period value | |
norm = colors.Normalize(vmin=frequencies[0], vmax=frequencies[-1]) | |
cmap = cm.jet_r | |
colormap = cm.ScalarMappable(norm=norm, cmap=cmap) | |
for freq, energy, bar in zip(frequencies, energies, bars): | |
bar.set_facecolor(colormap.to_rgba(freq)) | |
bar.set_alpha(0.5) | |
plt.show() | |
if __name__ == '__main__': | |
buoy_plotter = BuoySpectraPlotter('44097') | |
buoy_plotter.fetch_data() | |
buoy_plotter.plot_radar() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment