Category Archives: Global Warming

Climate Charts & Graphs Cleanup Progressing

Just a quick not to my blog visitors that I have been working to update my blog to show current climate data charts and to address missing charts and files.

I’ve been keeping many of my source data files, R scripts and images on another web site. this has made the routine maintenance more cumbersome than necessary.

My plan is to have all of my climate chart material self contained in one blog rather than store it on another web site. The transfer process will be causing some hiccups along the way.

I have removed a few older posts to simplify my blog maintenance. I still have some links to blank pages that I will try to cleanup in the next few weeks. If you find a missing data file or plot, let me know and I’ll try to get it restored.

Arctic Amplification – November, 2013: Updated 12/20/13

Updated (bold italic) 12/20/13 to reflect comments from David. 

NASA’s GISS temperature anomaly map (link) for November, 2013 is reproduced  below. It uses a 2×2 degree grid cell for the globe. 


The November, 2013 GISS temperature anomaly shows the critical global pattern that is important to recognize because it is fundamental to understanding why global warming is so dangerous.

First, the overall global anomaly for November, 2013 was 0.77 degrees C.  The 2 degree latitude zone mean anomaly varied from a low of 0.068 to a high of 2.33. So the mean global anomaly does not tell the full story, we need to look at the geographical distribution to really understand the global warming pattern.

As we examine the geographical distribution of the November, 2013 anomalies, we see that they tend to increase as we move from the equator toward the poles.  This pattern,  called polar amplification, means that the polar regions, particularly the Arctic region, warms much more rapidly than the overall global mean.

I developed this chart in R to display the mean zonal anomalies by 2 degree latitude zones to help me visualize the November, 2013 anomaly patterns.


Here is the R Script that I used to produce the chart.
#### GISS Temperature Anomaly - Zonal mean by 2 degree latitude
##K O'Day, Dec. 18, 2013
 link <- c("")
 mon <- "November, 2013"
 title <- paste("Mean Temperature Anomaly by 2 Degree Latitude Zones\n", mon, sep="" )
 note_1 <- "GISS Temperature Anomaly\n (1951-1980 base period)"
 df <- read.table(link, skip=4)
 par(las=1, oma=c(3,1,1,1), mar=c(5,5,3,1), ps=11)
 names(df)<- c("Zone", "Anom")
 #png(file="C://R_Home//Charts & Graphs Blog//RClimateTools//a_Revised_Blog//art_amp.png", bg="white")

 plot(df$Anom, df$Zone, xlim=c(0,3), ylim=c(-90,90), type="l", axes=F, xlab="Mean Anomaly for Zone - C",
      ylab = "Latitude",  xaxs="i", yaxs = "i", main=title)
   axis(1, at=NULL)
   axis(2, at=c(-90,-60,-30,0,30,60,90))
   abline(h=40, col="green")
   abline(h=0, col="darkgrey")
   abline(v=0.77,col = "black" )
   abline(h=64, col="blue")
   text(2.5, 43.5, "Philadelphia, Pa.", cex=0.7)
   text(2.7, 67, "Reykjavík, Iceland", cex=0.7)
   text(2.25, -20, note_1, cex=0.75, adj=0)
   rect(0.6,-65,0.85 , -50, col = "white", border = "white")
   text(0.77, -60, "Global Mean @ \n0.77 C", cex=0.7)
 mtext("D Kelly O'Day -", 1,1, adj = 0, cex = 0.8, outer=T)
 mtext(format(Sys.time(), "%m/%d/ %Y"), 1, 1, adj = 1, cex = 0.8, outer=T)

Pardon My Absence

I’ve been busy on other projects and have not been maintaining this blog.  For the past 2 years I’ve been working on local (Philadelphia) environmental issues and simply did not have the time to keep up with my climate charts.

I am reactivating this blog with a renewed sense of purpose. I will be cleaning up the blog, prioritizing and streamlining the site. Please bear with this clean-up effort.

Romney’s Views on Coal: Bad for Americans’ Health, the Enviroment and the Climate

Let’s look at a recent Romney campaign ad to get a sense for his views: Continue reading

Global Warming and 2012 Presidential Election

Mitt Romney and Barak Obama’s views on global warming, in their own words. Continue reading

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:

Global Sea Level Rise and El Nino – La Nina

Here is an informative interview with NASA’s Josh Willis about global sea level rise and El Nino – La Nina.  I first saw the video on Zeke Hausfather’s  YALE Forum on CLIMATE CHANGE & THE MEDIA

Comparison of UAH and RSS Time Series with Common Baseline

In this post I set both UAH 5.4 and RSS 3.3 global temperature anomaly series to a common baseline period (1981-2010)  to compare them. Since both the UAH 5.4 and RSS 3.3 series are satellite based , they exhibit striking similarities.

Common Baseline

In this previous post, I showed how to convert temperature anomaly time series from one baseline period to another period.  I then used this technique in this post to directly compare UAH 5.4 (baseline 1981-2010) and GISS.

In this post, I compare the satellite based UAH 5.4 (baseline 1981-2010) and RSS 3.3 (baseline 1979-1998) series.

The offsets are as follows:

  • UAH:  -0.000978
  • RSS:      0.098772

Since the UAH TLT 5.4 series is based on a 1981-2010 baseline, the offset is nearly zero (-0.00098 versus 0.0). The RSS offset changes the baseline from 1979-1998 to 1981-2010.

Users can reproduce my analysis on their own by downloading my CTS.csv file and applying the offsets to the UAH and RSS series.

Comparison of 1981-2010 Baseline Series

Here is a plot of UAH and RSS 12 month moving averages for 1979 to current: Click to Enlarge

Continue reading