Category Archives: RClimate Script

Animated Images of Arctic Sea Ice Extent Decline

This post shows how to download and animate a series of Arctic Sea Ice Extent images using R and the animation package.

Continue reading

R Script to Build Animation of Arctic Sea Ice Extent – Update 12/20/13

In my previous post I showed an animation of Arctic Sea Ice Extent from the 1980′s through August, 2012 (link).  In this post, I show how to build this Arctic Sea ice Extent  animated chart.

Source Data

The Arctic Ice Sea Monitor (link)   updates their daily csv file with the latest satellite based arctic sea ice measurements.  Here is the daily csv file link.

R script

To develop my animation of the daily Arctic Sea Ice extent, I decided to produce a plot for each year that showed the current year in red and the previous years in grey.  I go this idea from Tamino at Open Mind.

Here is my R script:
Be sure to set your working directory to appropriate location!!

  ani.options(convert=shQuote('C:\\Program Files (x86)\\ImageMagick-6.7.9-Q16\\convert.exe'))
## Use setwd() to specify directory where you want png images to be saved
  setwd("<strong>C:\\R_Home\\Charts & Graphs Blog\\RClimateTools\\Arctic_sea-ice_extent</strong><em>")
# use png_yn to toggle between plot output to png file or screen
  png_yn <- "y"
# Establish chart series patterns and colors to be able to distinguish current yr from previous years in plot
  pattern <- c(rep("dashed", 5), rep("solid", 12))
  ser_col <- c(rep("black",5),rep("grey",12))
# Establish chart annotations for date, chart title,
  what_date <- format(Sys.Date(), "%b %d, %Y")  # with month as a word
  title <- paste("IARC-JAXA Daily Arctic Sea Ice Extent*\n", what_date)
  note_1 <- "*Extent - Area of Ocean with at least 15% Sea Ice"
  par(oma=c(2,1,1,1)); par(mar=c(2,4,2,1))
#  Day of year axis setup
## Set up basic day of year vectors (mon_names, 1st day of mon)
  mon_names <- c("Jan", "Feb", "Mar", "April", "May", "June", "July", "Aug", "Sept", "Oct","Nov","Dec")
  mon_doy <- c(1,32,60,91,121,151,182,213,244,274,305,335,366)
  mon_pos <- c(16, 46, 75, 106,135, 165, 200, 228, 255, 289, 320, 355)
# Read JAXA Arctic Sea ice Extent csv file
# Data File: Month,Day,1980's Avg,1990's Avg,2000's Average,2002:2012
  link <- ""
  j_data <- read.csv(link, header = F, skip=1, na.strings = c(-9999))
 series_id <-  c("mo", "day", "1980s", "1990s", "2000s","2002", "2003", "2004", "2005", "2006", "2007", "2008", "2009",
                "2010", "2011", "2012", "2013")
 colnames(j_data) <- series_id
# File has data for each day in 366 day year
# Establish Day of year
  for (i in 1:366)   j_data$yr_frac[i] <- i
    #convert ASIE to millions Km^2
   j_data[,c(3:17)] <- j_data[,c(3:17)]/1000000
# Loop through years
   for (j in 3:17)
     png_name <- paste("asie",series_id[j],".png",sep="")
      if (png_yn =="y") png(filename=png_name)
      which_yr <- j
      no_yrs <- j
  # Calc min asie for year
    min_asie <- min(j_data[,j], na.rm = T)  # must remove na's to get valid answer
    lab_asie <- round(min_asie,3)
    min_r <- which(j_data[,j] == min_asie)
    min_d <- j_data[min_r,2]
    min_m <- j_data[min_r,1]
    min_date <- paste(min_m,"/",min_d,"/",series_id[j], sep="")
    plot(j_data[,17],  type="n", col = "grey",axes=F, xlab="",
       ylab="Arctic Sea Ice Extent - Millions Sq KM",
       ylim=c(0,15),xaxs="i", yaxs = "i",
    text(20, 1.5, note_1, cex = 0.8, adj=0, col = "black")
    text(20,1,"Data Source:", cex = 0.8, adj=0,col = "black")
    mtext("D Kelly O'Day -", 1,0.5, adj = 0, cex = 0.8, outer=T)
  # custom x & y axes
    axis(side = 1, at=mon_doy, labels=F, xaxs="i")
    axis(side=1, at= mon_pos, labels=mon_names, tick=F, line=F, xaxs="i")
    axis(side=2,  yaxs="i", las=1)
    points(70, min_asie, col = "red",pch=19, cex = 2)
  # Add each previous yr data series as light grey line
  for (n in 3:no_yrs)
    points(j_data[,18], j_data[,n], type="l",lwd=1,lty=pattern[j], col=ser_col[j])
    text(182,14,series_id[j], col = "red", cex = 1.1)
  points(j_data[,18], j_data[,j], col="red", type="l",lwd=2.5)
  text(182,14,series_id[j], col = "red", cex = 1.1)
  text(120,min_asie+0.5, min_date, col="red", cex=0.9)
  text(120,min_asie, lab_asie, col="red", cex=0.9)
  if(png_yn == "y")
## copy last png file 3 times to provide pause in animation
if(png_yn== "y")
  for (c in 1:2)
    file_name <- paste("asie2012",c, ".png",sep="")
    file.copy(from= "asie2012.png", to = file_name, overwrite=T)
  ani.options(outdir = getwd())    # direct gif output file to working dir
  ani.options(interval= 0.80)
  im.convert("asie*.png", "last_animation.gif")

Visualizing the Arctic Sea Ice Extent Decline

Understanding what is happening to Arctic sea ice is critical to recognizing the serious consequences of global warming. So I want to help people visualize the 30+ year trend in Arctic sea ice extent.

The source data file is here:

Comparison of GISS LOTAs During 5 El Nino – La Nina Cycles

In this post I compare GISS LOTAs during 5 El Nino – La Nina cycles (2010, 1998, 19883, 1973 and 1970).

El Nino – La Nina Cycles

In a previous post I showed the Nino 34 SSTA cycles for 2010, 1998, 1983, 1973 and 1970 here. In this post, I want to see how GISS Land Ocean Temperature Anomalies (LOTA) vary over El Nino – La Nina cycles.  Here is my RClimate chart showing GISS anomalies for 6 months prior to cycle year,the cycle year and the 12 months after cycle year (30 month period).

Click chart to enlarge


While the 2010 cycle is only partially complete, there are a number of interesting aspects in this chart. The average temperatures during the cycles have clearly risen with the latest cycle showing the highest maximum anomaly. All 5 cycles all have similar patterns, with a buildup in 6 months prior to cycle year. The maximum – minimum range for the 5 cycles are comparable, ranging from 0.45 (2010) to 0.60 (1998).

Here is a data summary of the 5 cycles.


Climate Time Series In a Single CSV File: Update 1

I am pleased to announce my CTS.csv file which includes 18 climate monthly time series in one easy to access csv file. This is part of  my goal of having a user friendly way for do-it-yourself citizen climate scientists to get up-to-date agency climate time series in a painless way.

Update 1: Reader Scott asked if I could provide meta data for the columns in my CTS.csv. This page lists the source agency and data links for the climate data series.

Here’s a snap shot of the first 6 rows of my  CTS.csv file. The data extends from 1880 until the most recent month.  Click image to enlarge

My hope is to make the CTS.csv the go-to file for citizen climate scientists who may want to:

  • Check temperature anomalies trends by series (GISS, HAD, NOAA, RSS, UAH)
  • Assess climate oscillations(AMO, AO, MEI, Nino34,  PDO)  trends
  • Evaluate  CO2 versus temperature anomaly relationships
  • Evaluate relationship between Sunspot numbers and anomaly temperature anomaly trends
  • Compare atmospheric transmission, SATO index  and volcanic activity
  • Assess impact of volcanoes on temperature anomaly trends
  • Compare MEI versus Nino ENSO 34 indicators
  • Assess lower stratospheric trends using RSS’s TLS series

By having these climate time series in a single csv file, R and Excel users can work with up to date data in a convenient form. The file will be automatically updated monthly as the climate agencies release their latest data.

How can CTS.csv Help Do-It-Yourself Citizen Climate Scientists?

Interested climate observers who want to compare global SSTA versus Nino34 trends, for example, have to follow a multiphase process:

  1. Find data file – even with Google this can take time
  2. Download files
  3. Merge 2 or more files to get data  into a usable format – source files all have different formats
  4. Perform analysis

Steps 1-3 can be very time consuming, so many users don’t bother checking out their ideas. Rather, they may rely on climate blog  comments. With CTS.csv and some R or Excel analysis, they can find the facts themselves rather than just having opinions.  They can submit their analysis and charts to blog posts, hopefully increasing the rigor of blog discussions.

Climate bloggers can request that their readers submit charts to back up their climate trend claims.

Data & RClimate Scripts Are All Open Book

All of the RClimate script that I use to produce the CTS.csv is available on-line at this link. Source data links are included in the function for each series.

Using RClimate To Retrieve Climate Series Data

This post shows how to use RClimate.txt to retrieve a climate time series and write a csv file in 5 lines of R script.

One of my readers, Robert, wants to be able to download climate time series data and write it to a csv file.  The R script below shows how to  download the MEI data series and write a csv file.  For this example I will use the RClimate function (func_MEI) to retrieve the data. I then simply specify the path and file name link for the output file (note quotes around the output file name and then write  a csv file.

m <- func_MEI()
output_link <- "C://R_Home/mei.csv"
write.csv(m, output_link, quote=FALSE, row.names = F)

Continue reading

Volcanic Solar Dimming, ENSO and Temperature Anomalies

In previous posts I have shown plots of global temperature anomaly, volcano and Nino34 trends (here , here). In this post , I want to further  explore the role of volcanic eruptions and Nino34 phases (El Nino, La Nina) on temperature anomalies.

This post shows a 5-panel chart of monthly climate trend data: 1) time line of major volcanoes and Volcanic Explosivity Index (VEI),  2) Mauna Loa Observatory (MLO) Atmospheric  Transmission  (AT) measurements,  3) Stratospheric Aerosol Optical Thickness (SATO) Index,   4) , Nino 34 as an indicator of ENSO and 5)  GISS land-ocean temperature anomaly.

The RClimate script and Climate Time Series data file (CTS.csv) links are provided.

First, here is  the 5-panel chart that I have made showing the monthly volcano time line with Volcano Explosivity Index (VEI) , Atmospheric Transmission at Mauna Loa Observatory, SATO Index as well as the Nino34 SSTA and GISS LOTA. (Click Image to Enlarge)


Continue reading

Climate Charts, Data and RClimate Scripts

While there are many online climate data resources, the source data files are in numerous data formats, presenting a challenge to climate citizen scientists who want to retrieve and analyze several climate indicators at the same time.

I have been working to develop a consolidated open access data file and RClimate scripts that users can use to retrieve climate data, conduct their own analysis  and generate their own climate charts.  My goal is to make it easier for climate citizen scientists to get their hands on the data in a simple,  usable format (CSV). This post updates the status of my RClimate efforts.

Continue reading

Nov 2010 Year-To-Date Global Temperature Anomaly 1st in 2 Series, 2nd in 3 Series: Update

This post shows the YTD global land – ocean temperature anomaly (LOTA) trends for the 5 major series through November, 2010 and how  2010 YTD ranks over the entire record for each series.  The source data  file link is provided.

Continue reading

Plotting Atmospheric Temperature Structure and Lapse Rate

This post presents an RClimate script to develop a temperature sounding profile and calculate the ambient lapse rate using University of Wyoming atmospheric sounding data. Understanding atmospheric structure and lapse rate is essential to a full understanding of the role of  greenhouse gases in global warming.

Continue reading