This Haywood plot shows the cumulative precipitation at Tucson International Airport for each water year since 1951. By default, the data is colored by the strength of El Nino (red) or La Nina (blue) in January and February of that year. The water year starts on October 1 of the previous year (e.g. 1951 spans October 1, 1950 through September 30, 1951).
Tips
- Hover your cursor over a line or a year in the table to highlight that year of data.
- Hover your cursor over a line to show a tooltip with data values on that date.
- Click on the line or the year to keep it highlighted when you move your cursor away. This can make it easier to compare a handful of specific years.
- Click the "Cool season," "Monsoon season," or "Full year" buttons to change date ranges.
- Click the "MEI," "ONI," or "PDO" buttons to switch between the Multivariate ENSO Index, the Oceanic Nino Index, and the Pacific Decadal Oscillation Index.
- Click a different month/months-average to change the time of the year that controls the colors.
- Open up a second browser tab to easily compare different settings or stations (see below).
Data sources
Precipitation data from comes from RCC-ACIS.
MEI data comes from NOAA ESRL. MEI v1 is used for 1951 - 1978. MEI v2 is used for 1979 - present.
PDO data comes from NOAA NCDC.
A python script fetches the MEI, ONI, and PDO data from the NOAA servers and formats it into simple csv files. The script runs periodically, so data may not always be up to date.
Advanced usage
Different observation locations can be plotted by adding ?sid=my_identifier to the URL. Your identifier can be a preselected city or any valid RCC-ACIS sid identifier. Your local airport code will probably work. The NCDC maintains a long list of GHCN station identifiers, though data will not be available for every station.
State averages can be plotted by adding ?state=my_identifier to the URL where the identifier is the state's two letter postal abbreviation. RCC-ACIS will take ~5 minutes to process these area average requests. Open your browser's debugger/developer tools to see if your request is still processing or if there was an error.
The mean and median calculations will be wrong if the data record since 1950 is not complete.
It is possible to manually control the start, end, minimum, and maximum values of the plot, as well as the index month. To do so, you'll need to open up your browser's debugger/developer tools and use the following functions in your javascript console.
To change the dates, use the command:
chart.months([startMonth, endMonth]).redraw()
Enter the months as integers (January = 1). The endMonth is inclusive. For example, to show data for only January 1 through March 31, use the command:
chart.months([1,3]).redraw()
Unfortunately, you cannot currently plot data that spans a new water year, so ranges such as [9,10] do not work.
By default, the plot will automatically scale the y axis to include all of the data displayed. To turn off autoscaling, use:
chart.autoscale(false)
The chart remembers its autoscale setting. Autoscaling may be turned on again using chart.autoscale(true).
The y axis range can be controlled with the yExtent function. For example, to change the range to 0 to 6 inches, use
chart.autoscale(false).yExtent([0,6]).redraw()
The MEI month index can be accessed and set using the chart.ensoBin() function. For example, to change the MEI mapping to the May-June average, use the command:
chart.ensoBin("MAYJUN").redraw()
The input parameter must be a column heading in the MEI table linked to above. If data for that bin for the most recent year is not yet available, then the most recent data that is available will be used.
The El Nino index can be toggled between the MEI and the more standard ONI using chart.ensoIndex(). You will also need to change the ensoBin setting since the indicies use different time averaging methods. For example:
chart.ensoIndex('oni').ensoBin('DJF').redraw()
chart.ensoIndex('mei').ensoBin("JANFEB").redraw()
The default color bin scheme can be changed to match the NOAA standard definition of neutral, weak, moderate, strong, and very strong ENSO conditions.
chart.colorBinScheme('noaa').redraw()
chart.colorBinScheme('default').redraw()
Combining the ONI with the NOAA color bin scheme yields a more standard analysis:
chart.ensoIndex('ONI').ensoBin('DJF').colorBinScheme('NOAA').redraw()
The chart.reset() function will reset the graph to the default settings.
All of these functions all return the chart, object, which enables them to be chained together as shown in the examples above. Most arguments are not case sensitive.
Many more getter-setter methods are available that provide fine control over the graph. See the source code for details.
Open source
The source code for this site is on GitHub and released under the MIT license. This means that you can easily copy the code, play with it, contribute your improvements to this page, or use the code as the starting point or inspiration for your own tool. Here are some possible improvements:
- Add controls for x and y axes.
- Add MJO Index.
- Add support for RCC-ACIS bbox averages.
- Add sticky tooltip with total precip for selected years.
- Distinguish between mean and median (e.g. make one grey or dashed).
- Use localStorage to cache data, then only request new data.
- Add means for each color bin.
Credits
Plot inspired by Mike Crimmins' excellent Monsoon plots and Ben McMahan and Mike's CLIMAS blog post.
Some of the graphing source code used on this site was originally developed for the SVERI project with help from UA's CALS-CCT team.
The plot is made with d3js.
Will Holmgren
Assistant Research Professor
Department of Hydrology and Atmospheric Sciences
Institute for Energy Solutions
University of Arizona