NDBC Buoy Meteorological Data Request

The NDBC keeps a 45-day recent rolling file for each buoy. This examples shows how to access the basic meteorological data from a buoy and make a simple plot.

import matplotlib.pyplot as plt

from siphon.simplewebservice.ndbc import NDBC

Get a pandas data frame of all of the observations, meteorological data is the default observation set to query.

wind_direction wind_speed wind_gust wave_height dominant_wave_period average_wave_period dominant_wave_direction pressure air_temperature water_temperature dewpoint visibility 3hr_pressure_tendency water_level_above_mean time
0 140.0 4.0 4.0 NaN NaN NaN NaN 1017.1 14.5 14.9 13.1 NaN NaN NaN 2025-08-04 20:30:00+00:00
1 140.0 4.0 4.0 1.3 17.0 10.2 189.0 1017.1 14.4 14.9 12.9 NaN NaN NaN 2025-08-04 20:20:00+00:00
2 140.0 4.0 4.0 1.3 NaN 10.2 189.0 1017.1 14.4 15.0 13.2 NaN NaN NaN 2025-08-04 20:10:00+00:00
3 150.0 4.0 5.0 NaN NaN NaN NaN 1017.0 14.3 15.0 13.3 NaN 0.4 NaN 2025-08-04 20:00:00+00:00
4 160.0 3.0 4.0 1.3 17.0 10.0 181.0 1017.0 14.5 15.0 13.5 NaN NaN NaN 2025-08-04 19:50:00+00:00


Let’s make a simple time series plot to checkout what the data look like.

fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(12, 10))
ax2b = ax2.twinx()

# Pressure
ax1.plot(df['time'], df['pressure'], color='black')
ax1.set_ylabel('Pressure [hPa]')

# Wind speed, gust, direction
ax2.plot(df['time'], df['wind_speed'], color='tab:orange')
ax2.plot(df['time'], df['wind_gust'], color='tab:olive', linestyle='--')
ax2b.plot(df['time'], df['wind_direction'], color='tab:blue', linestyle='-')
ax2.set_ylabel('Wind Speed [m/s]')
ax2b.set_ylabel('Wind Direction')

# Water temperature
ax3.plot(df['time'], df['water_temperature'], color='tab:brown')
ax3.set_ylabel('Water Temperature [degC]')

plt.show()
buoy met request

Total running time of the script: (0 minutes 0.482 seconds)

Gallery generated by Sphinx-Gallery