Programming Assignment 1: Visualize Data Using a Chart

US temperature graph

Programming Assignment 1: Visualize Data Using a Chart

1. Dataset used

I selected the US Temperatures dataset from  GISTEMP site as was proposed  in the Rubric.  url: https://data.giss.nasa.gov/gistemp/graphs_v4/

Dataset => Annual Mean Temperature Change in the United States

I developed the chart using d3.v4 and this dataset shows the US temperatures (Annual_Mean,Lowess) between 1880 and 2020.

2. Particular aspects of the chart to which I would like to bring attention

The line graph clearly shows the increase in both, Annual mean temperatures and lowest temperatures since 1920 and reaching the maximum values in 2020.

3. X and Y Axis:

The x axis represent the years of the temperature measurement and the y axis represent the temperature in Cº

4. What the data as shows

The graph shows the urgent need to reduce the carbon dioxide emissions that are producing global warming.

My d3 program

<!DOCTYPE html>
<head>
    <meta charset=”utf-8″>
    <style> /* set the CSS */
        body {
            font: 12px Arial;
        }
        #graph{
            background-color: #eee;
            width: 960px;
            height: 500px;
        }
        .mean{
            fill: none;
            stroke: steelblue;
            stroke-width: 2px;
        }
        .lowess{
            fill: none;
            stroke: red;
            stroke-width: 2px;
        }
        .axis path,
        .axis line {
            fill: none;
            stroke: grey;
            stroke-width: 1;
            shape-rendering: crispEdges;
        }
        .eixo{
            fill: none;
            stroke: grey;
            stroke-width: 2;
            shape-rendering: crispEdges;
        }
        .grid line {
            stroke: lightgrey;
            stroke-opacity: 0.7;
            shape-rendering: crispEdges;
          }
          .grid path {
            stroke-width: 0;
          }
    </style>
    <!– Load d3.js –>
    <script src=”https://d3js.org/d3.v4.js” charset=”utf-8″></script>
    <script>
        document.addEventListener(‘DOMContentLoaded’, function(){
            // set the dimensions and margins of the graph
            var margin = {top: 30, right: 30, bottom: 50, left: 70},
                width = 960 – margin.left – margin.right,
                height = 500 – margin.top – margin.bottom;
            // set the ranges
            var x = d3.scaleLinear().range([0, width]);
            var y = d3.scaleLinear().range([height, 0]);
            // define the line
            var line1 = d3.line()
                .x(function(d) { return x(d.Year); })
                .y(function(d) { return y(d.Annual_Mean); });
            // define the line
            var line2 = d3.line()
                .x(function(d) { return x(d.Year); })
                .y(function(d) { return y(d.Lowess); });
            // gridlines in x axis function
            function make_x_gridlines() {
                return d3.axisBottom(x)
                    .ticks(5)
            }
            // gridlines in y axis function
            function make_y_gridlines() {
                return d3.axisLeft(y)
                    .ticks(5)
            }
            // append the svg object to the body of the page
            // appends a ‘group’ element to ‘svg’
            // moves the ‘group’ element to the top left margin
            var svg = d3.select(“#graph”)
                        .append(“svg”)
                        .attr(“width”, width + margin.left + margin.right)
                        .attr(“height”, height + margin.top + margin.bottom)
                        .append(“g”)
                        .attr(“transform”, “translate(” + margin.left + “,” + margin.top + “)”);
            // Get the data
            d3.csv(“data/graph01a.csv”, function(error, data) {
            if (error) throw error;
                // format the data
                data.forEach(function(d) {
                d.Year = d.Year;
                d.Annual_Mean = d.Annual_Mean;
                d.Lowess = +d.Lowess;
                });
                // Scale the range of the data
                x.domain([d3.min(data, function(d) { return d.Year; }), d3.max(data, function(d) { return d.Year; })])
                y.domain([-1.2, 2.0]);
                // Add the line 1 path.
                svg.append(“path”)
                    .data([data])
                    .attr(“class”, “mean”)
                    .attr(“d”, line1);
                // Add the line 2 path.
                svg.append(“path”)
                    .data([data])
                    .attr(“class”, “lowess”)
                    .attr(“d”, line2);
                // Add the X Axis
                svg.append(“g”)
                    .attr(“transform”, “translate(0,” + height + “)”)
                    .call(d3.axisBottom(x))
                    .selectAll(“text”)
                    .attr(“transform”, “translate(15,0)”)
                    .style(“text-anchor”, “end”)
                    .style(“font-size”, 12)
                    .style(“fill”, “#493372”);
                // Add the Y Axis
                svg.append(“g”)
                    .call(d3.axisLeft(y))
                    .selectAll(“text”)
                    .attr(“transform”, “translate(-10,0)”)
                    .style(“text-anchor”, “end”)
                    .style(“font-size”, 12)
                    .style(“fill”, “#493372”);
                // Add Y axis label:
                svg.append(“text”)
                    .attr(“text-anchor”, “end”)
                    .attr(“transform”, “rotate(-90)”)
                    .attr(“y”, -margin.left+20)
                    .attr(“x”, -margin.top)
                    .text(“Temperature (Cº)”);
                // Add X axis label:
                svg.append(“text”)
                    .attr(“text-anchor”, “end”)
                    .attr(“x”, width)
                    .attr(“y”, height + margin.top + 5)
                    .text(“Year”);
                // Add Title
                svg.append(“text”)
                    .attr(“text-anchor”, “end”)
                    .attr(“x”, width* 0.6)
                    .attr(“y”, -5)
                    .text(“U.S. Temperature”)
                    .style(“font-size”, “24”);
                // Add label line 1 – Mean:
                svg.append(“text”)
                    .attr(“text-anchor”, “end”)
                    .attr(“x”, width – 40)
                    .attr(“y”, height -50)
                    .text(“Annual Mean”)
                    .style(“font-size”, 16)
                    .style(“fill”, “#493372”);
                // Add label line 2 – Lowess:
                svg.append(“text”)
                    .attr(“text-anchor”, “end”)
                    .attr(“x”, width – 85)
                    .attr(“y”, height – 30)
                    .text(“Lowess”)
                    .style(“font-size”, 16)
                    .style(“fill”, “#493372”);
                // Data source text:
                svg.append(“text”)
                    .attr(“text-anchor”, “end”)
                    .attr(“x”, 420)
                    .attr(“y”, height + 35)
                    .text(“Source: National Aeronautics and Space Administration – Goddard Institute for Space Studies”)
                    .style(“font-size”, 10)
                    .style(“fill”, “#000”);
                // Add circle line 1 – Mean:
                svg.append(“circle”)
                    .attr(“cx”, width – 150)
                    .attr(“cy”, height -55)
                    .attr(“r”, 5)
                    .attr(“fill”, “steelblue”)
                // Add circle line 2 – Lowess:
                svg.append(“circle”)
                .attr(“cx”, width – 150)
                .attr(“cy”, height -35)
                .attr(“r”, 5)
                .attr(“fill”, “red”)
                // add the X gridlines
                svg.append(“g”)
                    .attr(“class”, “grid”)
                    .attr(“transform”, “translate(0,” + height + “)”)
                    .call(make_x_gridlines()
                        .tickSize(-height)
                        .tickFormat(“”)
                    )
                // add the Y gridlines
                svg.append(“g”)
                .attr(“class”, “grid”)
                .call(make_y_gridlines()
                    .tickSize(-width)
                    .tickFormat(“”)
                )
            });    // end get data
        });  // end DOMContentLoaded
</script>
</head>
<body>
    <div id=”graph”></div>
</body>

Data obtained from:

GISTEMP site

National Aeronautics and Space Administration – Goddard Institute for Space Studies

File: data/graph01a.csv

U.S. Temperature
Year,Annual_Mean,Lowess(5)
1880,-0.44,-0.19
1881,0.20,-0.24
1882,-0.00,-0.27
1883,-0.64,-0.29
1884,-0.66,-0.32
1885,-0.38,-0.32
1886,-0.20,-0.27
1887,-0.07,-0.16
1888,-0.26,-0.09
1889,0.29,-0.09
1890,0.20,-0.13
1891,-0.21,-0.18
1892,-0.48,-0.24
1893,-0.69,-0.30
1894,0.05,-0.32
1895,-0.76,-0.31
1896,0.07,-0.28
1897,-0.22,-0.24
1898,-0.29,-0.19
1899,-0.50,-0.17
1900,0.44,-0.20
1901,-0.06,-0.23
1902,-0.16,-0.26
1903,-0.68,-0.30
1904,-0.47,-0.33
1905,-0.51,-0.33
1906,-0.09,-0.28
1907,-0.29,-0.20
1908,0.07,-0.12
1909,-0.29,-0.09
1910,0.26,-0.11
1911,0.07,-0.11
1912,-0.90,-0.13
1913,-0.16,-0.20
1914,-0.02,-0.29
1915,-0.23,-0.33
1916,-0.60,-0.33
1917,-1.05,-0.35
1918,-0.04,-0.35
1919,-0.19,-0.29
1920,-0.49,-0.22
1921,1.02,-0.18
1922,0.08,-0.16
1923,-0.14,-0.11
1924,-0.72,-0.05
1925,0.32,-0.04
1926,-0.01,-0.04
1927,0.11,-0.02
1928,-0.01,0.02
1929,-0.58,0.06
1930,0.05,0.12
1931,0.93,0.21
1932,-0.06,0.28
1933,0.59,0.30
1934,1.15,0.28
1935,-0.02,0.27
1936,0.11,0.29
1937,-0.18,0.27
1938,0.71,0.27
1939,0.75,0.28
1940,-0.02,0.29
1941,0.46,0.24
1942,0.00,0.16
1943,0.08,0.12
1944,0.00,0.10
1945,-0.09,0.08
1946,0.57,0.07
1947,0.03,0.04
1948,-0.12,0.01
1949,0.15,-0.01
1950,-0.27,0.03
1951,-0.39,0.12
1952,0.25,0.18
1953,0.84,0.23
1954,0.78,0.28
1955,-0.08,0.29
1956,0.24,0.24
1957,0.12,0.14
1958,0.06,0.07
1959,0.16,0.05
1960,-0.22,0.03
1961,0.02,0.01
1962,-0.00,-0.01
1963,0.19,-0.03
1964,-0.10,-0.05
1965,-0.11,-0.08
1966,-0.20,-0.13
1967,-0.08,-0.16
1968,-0.29,-0.18
1969,-0.21,-0.18
1970,-0.15,-0.15
1971,-0.12,-0.11
1972,-0.30,-0.07
1973,0.25,-0.05
1974,0.19,-0.04
1975,-0.19,-0.04
1976,-0.24,-0.09
1977,0.35,-0.12
1978,-0.46,-0.09
1979,-0.54,-0.06
1980,0.25,-0.06
1981,0.66,-0.04
1982,-0.31,0.00
1983,0.01,0.06
1984,0.05,0.13
1985,-0.33,0.20
1986,0.74,0.28
1987,0.78,0.37
1988,0.36,0.46
1989,-0.08,0.49
1990,0.86,0.44
1991,0.67,0.40
1992,0.34,0.39
1993,-0.36,0.34
1994,0.48,0.28
1995,0.37,0.29
1996,-0.07,0.40
1997,0.14,0.52
1998,1.27,0.61
1999,1.04,0.70
2000,0.69,0.79
2001,0.94,0.81
2002,0.69,0.78
2003,0.68,0.79
2004,0.62,0.81
2005,0.91,0.79
2006,1.25,0.73
2007,0.92,0.69
2008,0.18,0.64
2009,0.23,0.57
2010,0.58,0.51
2011,0.68,0.50
2012,1.82,0.60
2013,0.27,0.76
2014,0.30,0.88
2015,1.35,0.96
2016,1.65,1.05
2017,1.43,1.09
2018,0.89,1.12
2019,0.44,1.13
2020,1.34,1.12