Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

URGENT D3, JavaScript question I have to prepare a cholopleth map on a US map. I

ID: 3683907 • Letter: U

Question

URGENT D3, JavaScript question

I have to prepare a cholopleth map on a US map.

I have to find the states which are most visited by senetors during campaigning for elections. Data is given in the for of trips.json file (link http://www.cis.umassd.edu/~dkoop/dsc530/a3/trips.json )

For US map geoJSON file is give http://www.cis.umassd.edu/~dkoop/dsc530/a3/us-states.geojson

Please help me to find the function which takes in top visited "states" and forms the chloropleth.

PART 2

On a separate map, plot the cities visited the most by the candidates. Here, you should look at the stops array for each trip and find the ten cities where candidates made the most stops. Place a dot at each one of those cities and label them.

Hints:

Each stop contains lat and lng attributes which correspond to latitude and longitude.

You need to project latitude and longitude coordinates to x and y positions.

Pass coordinates as an array to the projection function. You also get an array (x and y) back from that function.

Explanation / Answer

Hi below i have given the code in HTML format for to understanding of the flow, The syntax and the function can be changed to Javascript for your reference,

<!DOCTYPE html>

<html lang="en">

<head>

<meta charset="utf-8">

<script src="http://d3js.org/d3.v3.min.js"></script>

<style type="text/css">

/* On mouse hover, lighten state color */

path:hover {

fill-opacity: .7;

}

/* Style for Custom Tooltip */

div.tooltip {

    position: absolute;

text-align: center;

width: 60px;

height: 28px;

padding: 2px;

font: 12px sans-serif;

background: white;

border: 0px;

border-radius: 8px;

pointer-events: none;

}

  

/* Legend Font Style */

body {

font: 11px sans-serif;

}

  

/* Legend Position Style */

.legend {

position:absolute;

left:800px;

top:350px;

}

</style>

</head>

<body>

<script type="text/javascript">

      

//Width and height of map

var width = 960;

var height = 500;

// D3 Projection

var projection = d3.geo.albersUsa()

               .translate([width/2, height/2]) // translate to center of screen

               .scale([1000]); // scale things down so see entire US

  

// Define path generator

var path = d3.geo.path() // path generator that will convert GeoJSON to SVG paths

           .projection(projection); // tell path generator to use albersUsa projection

      

// Define linear scale for output

var color = d3.scale.linear()

              .range(["rgb(213,222,217)","rgb(69,173,168)","rgb(84,36,55)","rgb(217,91,67)"]);

var legendText = ["Cities Lived", "States Lived", "States Visited", "Nada"];

//Create SVG element and append map to the SVG

var svg = d3.select("body")

           .append("svg")

           .attr("width", width)

           .attr("height", height);

  

// Append Div for tooltip to SVG

var div = d3.select("body")

          .append("div")

       .attr("class", "tooltip")

       .style("opacity", 0);

// Load in my states data!

d3.csv("stateslived.csv", function(data) {

color.domain([0,1,2,3]); // setting the range of the input data

// Load GeoJSON data and merge with states data

d3.json("us-states.json", function(json) {

// Loop through each state data value in the .csv file

for (var i = 0; i < data.length; i++) {

// Grab State Name

var dataState = data[i].state;

// Grab data value

var dataValue = data[i].visited;

// Find the corresponding state inside the GeoJSON

for (var j = 0; j < json.features.length; j++) {

       var jsonState = json.features[j].properties.name;

       if (dataState == jsonState) {

       // Copy the data value into the JSON

       json.features[j].properties.visited = dataValue;

       // Stop looking through the JSON

       break;

       }

   }

}

      

// Bind the data to the SVG and create one path per GeoJSON feature

svg.selectAll("path")

   .data(json.features)

   .enter()

   .append("path")

   .attr("d", path)

   .style("stroke", "#fff")

   .style("stroke-width", "1")

   .style("fill", function(d) {

// Get data value

var value = d.properties.visited;

if (value) {

//If value exists…

return color(value);

   } else {

//If value is undefined…

return "rgb(213,222,217)";

   }

});

         

// Map the cities I have lived in!

d3.csv("cities-lived.csv", function(data) {

svg.selectAll("circle")

   .data(data)

   .enter()

   .append("circle")

   .attr("cx", function(d) {

       return projection([d.lon, d.lat])[0];

   })

   .attr("cy", function(d) {

       return projection([d.lon, d.lat])[1];

   })

   .attr("r", function(d) {

       return Math.sqrt(d.years) * 4;

   })

       .style("fill", "rgb(217,91,67)")  

       .style("opacity", 0.85)  

   .on("mouseover", function(d) {

   div.transition()

       .duration(200)

   .style("opacity", .9);

   div.text(d.place)

   .style("left", (d3.event.pageX) + "px")

   .style("top", (d3.event.pageY - 28) + "px");

   })

// fade out tooltip on mouse out

.on("mouseout", function(d) {

div.transition()

   .duration(500)

   .style("opacity", 0);

});

});

var legend = d3.select("body").append("svg")

           .attr("class", "legend")

              .attr("width", 140)

           .attr("height", 200)

                  .selectAll("g")

                  .data(color.domain().slice().reverse())

                  .enter()

                  .append("g")

              .attr("transform", function(d, i) { return "translate(0," + i * 20 + ")"; });

   legend.append("rect")

             .attr("width", 18)

             .attr("height", 18)

             .style("fill", color);

   legend.append("text")

          .data(legendText)

      .attr("x", 24)

      .attr("y", 9)

      .attr("dy", ".35em")

      .text(function(d) { return d; });

   });

});

</script>

</body>

</html>