Tide predictions (magnitudes and times of high and low tides) come from the National Oceanic and Atmospheric Administration’s tide predictions.
Since tidal fluctuations are sinusoidal, the tide curves in the calendar are created by interpolating a half sine wave to connect each subsequent high or low. Each high is the peak of its two adjacent interpolating waves, and each low is the trough of its two adjacent waves. This is not an exact representation of the actual tides, but it is qualitatively similar. NOAA predicts the highs and lows at primary stations using tidal harmonics — fitting a curve to the historical observations by adding up a series of sinusoidal functions. The highs and lows at secondary or “subordinate” stations are predicted by offsetting the predictions for a nearby primary or “harmonic” station.
NOAA provides tide predictions in local time. Since daylight savings time changes can interfere with calculations, the tide predictions are converted to UTC (coordinated universal time, which has no daylight savings) for building the tide curves, and then localized again before drawing the calendar. The filled area plots tend to mask the blips caused by daylight savings time changes, but if you look very carefully, you may spot them.
NOAA revises the online predictions as new observations come in, so for precise up-to-date tide predictions, check their website.
Sun and moon heights in the sky over time are astronomical computations, and are specific for a given location on Earth and a given date. They are directly calculated for this calendar using PyEphem, a Python programming language package based on the XEphem astronomy application.
http://rhodesmill.org/pyephem/
PyEphem can calculate the sun or moon’s position at any date and time. For the print and PDF calendars, altitudes are calculated every 10 minutes. The altitude of the sun or moon is defined as its angle above the horizon, as observed from a given location on Earth. For example, if the sun’s altitude is 90°, it is directly overhead, and if it is 0°, it is sunrise or sunset. Altitudes are defined relative to the apparent sea level horizon, ignoring any mountains or other obstacles, assuming an observer who is also at sea level. The calculations account for atmospheric refraction assuming a temperature of 15°C and atmospheric pressure of 1010 mB. The observer’s location is set to the latitude and longitude coordinates of the NOAA tide prediction station.
For the sun, two different measures of height are shown on the calendar. The darker yellow foreground area shows the sun’s altitude angle, and the lighter colored background area shows the sine of the sun’s altitude angle. This is called the insolation, the intensity of sunlight per unit surface area. It corresponds to brightness (strength of the radiation received by the observer) and is the most relevant measure for UV exposure. The top of the date’s box in the calendar corresponds to sin(altitude) = 1, e.g. the sun or moon being at 100% of maximum intensity, and the horizon line to sin(altitude) = 0, e.g. rise or set.
Moon phases (new moon, first quarter moon, full moon, last quarter moon) are calculated by PyEphem for each lunar cycle of the year. The lunar cycle icons for each date are fitted to these phases, using the fractional progress between quarter phases and rounding off to a cycle day number. There are 28 moon phase icons, but lunar cycles range in length, with an average of about 29.5 days. So, there are sometimes skipped or repeated icons, due to rounding off as well as having slightly fewer unique icons than actual lunar cycle days. Lunar cycle icons are fitted for 10:00pm local time on each date.
Solstices and equinoxes are shown with colored sun icons. The horizontal placement of the icon shows the exact timing of the event, as calculated by PyEphem.
As with the tide curves, all calculations are performed with times in UTC (universal time) to avoid problems caused by daylight saving time changes, and the times are then localized before drawing the calendar. As the time changes tend to occur in the middle of the night, they will not be visible on the sun plot, but sometimes you can find signs of them on the moon plot. As with the tides, the filled area plots tend to mask the 1-hour blips.
The calendar is automatically generated from publicly available NOAA tide predictions, downloaded from the NOAA tide predictions website. All code was written by Sara Hendrix. Underlying computations are performed in Python (version 3.4.3), with the following additional packages: PyEphem (ephem), pandas, numpy, and pytz. PDF generating code is in Python and also uses matplotlib, pillow, pyPDF2, and WeasyPrint. Source code for generating the free/shareable PDF calendars is online on GitHub.
The moon phase icons are a font called “Moon Phases”, copyrighted by Curtis Clark and used pursuant to license agreement.