69 min read

Lighthouses of the Great Lakes

black and white lighthouse in Luddington State Park
Big Sable Point Lighthouse. Photo by James Phelps from USA, CC BY 2.0 via Wikimedia Commons.

View raw source for this post


This post uses the United States Coast Guard data to plot navigation aides. Many observations were dropped for incomplete data, but those with a dwelling were colored differently. Buoys were omitted too.

Table of Contents


This post seeks to identify prominent lighthouses and navigational aids along the coasts and waterways of the Great Lakes. The U.S. Coast Guard’s “Light List” is used for the descriptive analysis.


International Standards

The International Association of Lighthouse Authorities (IALA) endorsed two maritime buoyage systems in 1977. [1] The systems, designated as “A” and “B,” displaced a multitude of country-level systems. The Americas, including the U.S. and Canada, are in Region B. The greatest difference between the two systems is that in Region B, red markers are on the right whereas in Region A, red makers are on the left.

All navigational aids within IALA have four characteristics: shape, light, color and topmark. A “Lighthouse” is defined as “a tower, or substantial building or structure, erected at a designated geographical location to carry a signal light and provides a significant daymark. It provides a long or medium range light for identification by night.”


The standard buoy shapes are cylindrical (can), conical (nun), spherical, pillar and spindle.


The colors are either “W” white, “R” red, “G” green, “Y” yellow, “O” orange or “Bu” blue. The default color is white.


Navigational aids can be either lit or not. When lit, the light can be continuous or flashing. When flashing, the light is further described as isophase or occulting. The time of the light cycle is often used for further identification.

U.S. Coast Guard Light List

The U.S. Coast Guard maintains a “light list” which is published annually. The light list is an inventory of navigation aides including all lights, sound signals, buoys, day beacons, and other aids. The data is available in both .pdf and .xml. The 2021 data is for the ninth district known as the “Great Lakes and the St. Lawrence River above the St. Regis River.” [2]

A code sheet is included within the annual light list report. Of interest for this analysis is the “height” column. “Height” is defined for the Great Lakes as “height above water from the focal plane of the fixed light to low water datum, listed in feet and meters.”

“Range” is defined as the “nominal range of lighted aids to navigation, in nautical miles, listed by color for sector and passing lights. Nominal Range is not listed for ranges, directional lights, or private aids to navigation.”

“Structure” is defined as “the structural characteristic of the aid to navigation, including: dayboard (if any), description of fixed structure, color and type of buoy, height of structure above ground for major lights.”

Commercial vessels are required to maintain on board a current copy of the U.S. Coast Guard Light List.

Load the Data

The USCG Light List contains in excess of 4500 navigational aids in District 9. Much of the data is missing, particularly for aids like buoys in secondary channels. For instance, there would seem to be little need to record the height and range of a channel buoy that is sitting at sea level. Structures that contained the term “buoy” were eliminated from the data set.

Full USCG Light List--Great Lakes Region.

Figure 1: Full USCG Light List–Great Lakes Region.

The final data set was winnowed to 649 observations. The most significant variable was the range that the navigational aid could be seen while on the water. The range could be a proxy for the importance of the aid to boating traffic. Another closely related variable was the “height” variable. The higher a light was from the earth, the easier it was to be seen on the horizon. Thus, height would seem to be a predictor of range. The chart below shows the correlation between the two variables.

Plot showing the connection between height and range.

Figure 2: Plot showing the connection between height and range.

Leaflet Plot

The leaflet package in R was used to map the navigational aids. [3]Latitude and longitude were furnished as part of the data set. To add greater detail and utility to the data, a spatial plot was generated. Light aids where a “dwelling” was included in the structure variable were assigned a different color for the marker. Only twenty of the navigational aids had a dwelling attached. There were no dwellings attached to a light where its height was less than 50 feet. Additionally, the size of the marker was set based on the range of the light. The range of the lights was between 3 and 25 nautical miles. The median range was 6.

Figure 3: Upper Lake Michigan


The points plotted are from the USCG list and a large portion of the data set was omitted due to incomplete data. The residual show broad coverage across the Great Lakes with greater density in places where ports are located, narrow channels or prominent points of land. Only twenty of the light aids are attached to a dwelling.


This blog post was made possible thanks to:


International Assoc. Lighthouse Authorities and International Assoc. of Marine Aids to Navigation, “Maritime Buoyage System and Other Aids to Navigation.” 2021 [Online]. Available: https://www.irishlights.ie/media/11141/IALA-MBS.pdf. [Accessed: 10-Mar-2020]
United States Coast Guard, “Weekly Light Lists.” 2021 [Online]. Available: https://www.navcen.uscg.gov/?pageName=lightListWeeklyUpdates. [Accessed: 09-Mar-2021]
J. Cheng, B. Karambelkar, and Y. Xie, Leaflet: Create interactive web maps with the JavaScript leaflet library. 2021 [Online]. Available: https://rstudio.github.io/leaflet/
R Core Team, R: A language and environment for statistical computing. Vienna, Austria: R Foundation for Statistical Computing, 2020 [Online]. Available: https://www.R-project.org/
Y. Xie, C. Dervieux, and A. Presmanes Hill, Blogdown: Create blogs and websites with r markdown. 2021 [Online]. Available: https://CRAN.R-project.org/package=blogdown


The views, analysis and conclusions presented within this paper represent the author’s alone and not of any other person, organization or government entity. While I have made every reasonable effort to ensure that the information in this article was correct, it will nonetheless contain errors, inaccuracies and inconsistencies. It is a working paper subject to revision without notice as additional information becomes available. Any liability is disclaimed as to any party for any loss, damage, or disruption caused by errors or omissions, whether such errors or omissions result from negligence, accident, or any other cause. The author(s) received no financial support for the research, authorship, and/or publication of this article.


─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────
 setting  value                       
 version  R version 3.6.3 (2020-02-29)
 os       macOS Catalina 10.15.7      
 system   x86_64, darwin15.6.0        
 ui       X11                         
 language (EN)                        
 collate  en_US.UTF-8                 
 ctype    en_US.UTF-8                 
 tz       America/Chicago             
 date     2021-03-07                  

─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────
 package       * version date       lib source        
 assertthat      0.2.1   2019-03-21 [1] CRAN (R 3.6.0)
 BiocManager     1.30.10 2019-11-16 [1] CRAN (R 3.6.0)
 BiocStyle     * 2.14.4  2020-01-09 [1] Bioconductor  
 blogdown      * 1.2     2021-03-04 [1] CRAN (R 3.6.3)
 bookdown        0.21    2020-10-13 [1] CRAN (R 3.6.3)
 bslib           0.2.4   2021-01-25 [1] CRAN (R 3.6.2)
 cachem          1.0.4   2021-02-13 [1] CRAN (R 3.6.2)
 callr           3.5.1   2020-10-13 [1] CRAN (R 3.6.2)
 cli             2.3.1   2021-02-23 [1] CRAN (R 3.6.3)
 codetools       0.2-18  2020-11-04 [1] CRAN (R 3.6.2)
 colorspace      2.0-0   2020-11-11 [1] CRAN (R 3.6.2)
 crayon          1.4.1   2021-02-08 [1] CRAN (R 3.6.2)
 DBI             1.1.1   2021-01-15 [1] CRAN (R 3.6.2)
 desc            1.3.0   2021-03-05 [1] CRAN (R 3.6.3)
 devtools      * 2.3.2   2020-09-18 [1] CRAN (R 3.6.2)
 digest          0.6.27  2020-10-24 [1] CRAN (R 3.6.2)
 dplyr           1.0.5   2021-03-05 [1] CRAN (R 3.6.3)
 ellipsis        0.3.1   2020-05-15 [1] CRAN (R 3.6.2)
 evaluate        0.14    2019-05-28 [1] CRAN (R 3.6.0)
 fansi           0.4.2   2021-01-15 [1] CRAN (R 3.6.2)
 farver          2.1.0   2021-02-28 [1] CRAN (R 3.6.3)
 fastmap         1.1.0   2021-01-25 [1] CRAN (R 3.6.2)
 fs              1.5.0   2020-07-31 [1] CRAN (R 3.6.2)
 generics        0.1.0   2020-10-31 [1] CRAN (R 3.6.2)
 ggplot2       * 3.3.3   2020-12-30 [1] CRAN (R 3.6.2)
 ggthemes      * 4.2.4   2021-01-20 [1] CRAN (R 3.6.2)
 glue            1.4.2   2020-08-27 [1] CRAN (R 3.6.2)
 gtable          0.3.0   2019-03-25 [1] CRAN (R 3.6.0)
 highr           0.8     2019-03-20 [1] CRAN (R 3.6.0)
 htmltools 2021-01-22 [1] CRAN (R 3.6.2)
 httr            1.4.2   2020-07-20 [1] CRAN (R 3.6.2)
 jquerylib       0.1.3   2020-12-17 [1] CRAN (R 3.6.2)
 jsonlite        1.7.2   2020-12-09 [1] CRAN (R 3.6.2)
 knitcitations * 1.0.12  2021-01-10 [1] CRAN (R 3.6.2)
 knitr           1.31    2021-01-27 [1] CRAN (R 3.6.2)
 labeling        0.4.2   2020-10-20 [1] CRAN (R 3.6.2)
 lifecycle       1.0.0   2021-02-15 [1] CRAN (R 3.6.2)
 lubridate       1.7.10  2021-02-26 [1] CRAN (R 3.6.3)
 magrittr        2.0.1   2020-11-17 [1] CRAN (R 3.6.2)
 memoise         2.0.0   2021-01-26 [1] CRAN (R 3.6.2)
 munsell         0.5.0   2018-06-12 [1] CRAN (R 3.6.0)
 pillar          1.5.1   2021-03-05 [1] CRAN (R 3.6.3)
 pkgbuild        1.2.0   2020-12-15 [1] CRAN (R 3.6.2)
 pkgconfig       2.0.3   2019-09-22 [1] CRAN (R 3.6.0)
 pkgload         1.2.0   2021-02-23 [1] CRAN (R 3.6.3)
 plyr            1.8.6   2020-03-03 [1] CRAN (R 3.6.0)
 prettyunits     1.1.1   2020-01-24 [1] CRAN (R 3.6.0)
 processx        3.4.5   2020-11-30 [1] CRAN (R 3.6.2)
 ps              1.6.0   2021-02-28 [1] CRAN (R 3.6.3)
 purrr           0.3.4   2020-04-17 [1] CRAN (R 3.6.2)
 R6              2.5.0   2020-10-28 [1] CRAN (R 3.6.2)
 Rcpp            1.0.6   2021-01-15 [1] CRAN (R 3.6.2)
 RefManageR      1.3.0   2020-11-13 [1] CRAN (R 3.6.2)
 remotes         2.2.0   2020-07-21 [1] CRAN (R 3.6.2)
 rlang           0.4.10  2020-12-30 [1] CRAN (R 3.6.2)
 rmarkdown       2.7     2021-02-19 [1] CRAN (R 3.6.3)
 rprojroot       2.0.2   2020-11-15 [1] CRAN (R 3.6.2)
 sass            0.3.1   2021-01-24 [1] CRAN (R 3.6.2)
 scales          1.1.1   2020-05-11 [1] CRAN (R 3.6.2)
 sessioninfo     1.1.1   2018-11-05 [1] CRAN (R 3.6.0)
 stringi         1.5.3   2020-09-09 [1] CRAN (R 3.6.2)
 stringr         1.4.0   2019-02-10 [1] CRAN (R 3.6.0)
 testthat        3.0.2   2021-02-14 [1] CRAN (R 3.6.2)
 tibble          3.1.0   2021-02-25 [1] CRAN (R 3.6.3)
 tidyselect      1.1.0   2020-05-11 [1] CRAN (R 3.6.2)
 usethis       * 2.0.1   2021-02-10 [1] CRAN (R 3.6.2)
 utf8            1.1.4   2018-05-24 [1] CRAN (R 3.6.0)
 vctrs           0.3.6   2020-12-17 [1] CRAN (R 3.6.2)
 withr           2.4.1   2021-01-26 [1] CRAN (R 3.6.2)
 xfun            0.21    2021-02-10 [1] CRAN (R 3.6.2)
 xml2            1.3.2   2020-04-23 [1] CRAN (R 3.6.2)
 yaml            2.2.1   2020-02-01 [1] CRAN (R 3.6.0)

[1] /Library/Frameworks/R.framework/Versions/3.6/Resources/library