csv - D3 nested objects should be different colors -


i'm creating line graph in area under line colored based on variable rank not taken account plotting date , close. i'm using d3.nest() chunk data based on rank , looping through datagroup , plotting each entry random color.

based on thought process, each of datagroups should different color, when plots, 1 random color whole plot.

here's plunker

<!doctype html> <meta charset="utf-8"> <style>  body {     font: 12px arial; }  text.shadow {   stroke: #fff;   stroke-width: 2.5px;   opacity: 0.9; }  path {      stroke: steelblue;     stroke-width: 2;     fill: none; }  .axis path, .axis line {     fill: none;     stroke: grey;     stroke-width: 1;     shape-rendering: crispedges; }  .grid .tick {     stroke: lightgrey;     stroke-opacity: 0.7;     shape-rendering: crispedges; } .grid path {           stroke-width: 0; }  .area {     stroke-width: 0; }  </style> <body> <script src="http://d3js.org/d3.v3.min.js"></script>  <script>  var margin = {top: 30, right: 20, bottom: 35, left: 50},     width = 600 - margin.left - margin.right,     height = 270 - margin.top - margin.bottom;  var parsedate = d3.time.format("%d-%b-%y").parse;  var color = d3.scale.category20();  var x = d3.time.scale().range([0, width]); var y = d3.scale.linear().range([height, 0]);  var xaxis = d3.svg.axis()     .scale(x)     .orient("bottom")     .ticks(5);  var yaxis = d3.svg.axis()     .scale(y)     .orient("left")     .ticks(5);  var area = d3.svg.area()     .x(function(d) { return x(d.date); })     .y0(height)     .y1(function(d) { return y(d.close); });  var valueline = d3.svg.line()     .x(function(d) { return x(d.date); })     .y(function(d) { return y(d.close); });  var svg = d3.select("body")     .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 + ")");  // function x grid lines function make_x_axis() {     return d3.svg.axis()         .scale(x)         .orient("bottom")         .ticks(5) }  // function y grid lines function make_y_axis() {   return d3.svg.axis()       .scale(y)       .orient("left")       .ticks(5) }  // data d3.csv("data.csv", function(error, data) {     data.foreach(function(d) {         d.date = parsedate(d.date);         d.close = +d.close;     });      var datagroup = d3.nest()         .key(function(d) {             return d.rank;         })         .entries(data);      // scale range of data     x.domain(d3.extent(data, function(d) { return d.date; }));     y.domain([0, d3.max(data, function(d) { return d.close; })]);      datagroup.foreach(function(d, i){         svg.append("path")             .datum(data)             .attr("class", "area")             .attr("d", area);         });      svg.selectall(".area")         .style("fill",function() {           return "hsl(" + math.random() * 360 + ",100%,50%)";         })      // draw x grid lines     svg.append("g")         .attr("class", "grid")         .attr("transform", "translate(0," + height + ")")         .call(make_x_axis()             .ticksize(-height, 0, 0)             .tickformat("")         )      // draw y grid lines     svg.append("g")                     .attr("class", "grid")         .call(make_y_axis()             .ticksize(-width, 0, 0)             .tickformat("")         )      // add valueline path.     svg.append("path")         .attr("d", valueline(data));      // add x axis     svg.append("g")         .attr("class", "x axis")         .attr("transform", "translate(0," + height + ")")         .call(xaxis);      // add y axis     svg.append("g")         .attr("class", "y axis")         .call(yaxis);      // add text label x axis     svg.append("text")         .attr("transform",               "translate(" + (width/2) + " ," +                               (height+margin.bottom) + ")")         .style("text-anchor", "middle")         .text("date");      // add white background y axis label legibility     svg.append("text")         .attr("transform", "rotate(-90)")         .attr("y", 6)         .attr("x", margin.top - (height / 2))         .attr("dy", ".71em")         .style("text-anchor", "end")         .attr("class", "shadow")         .text("price ($)");      // add text label y axis     svg.append("text")         .attr("transform", "rotate(-90)")         .attr("y", 6)         .attr("x", margin.top - (height / 2))         .attr("dy", ".71em")         .style("text-anchor", "end")         .text("price ($)");      // add title     svg.append("text")         .attr("x", (width / 2))              .attr("y", 0 - (margin.top / 2))         .attr("text-anchor", "middle")         .style("font-size", "16px")         .style("text-decoration", "underline")         .text("price vs date graph");  });  </script> </body> 

you bind complete dataset (data) each area element. result, areas on top of each other , fill results in showing top area path. instead in datagroup.foreach() need bind data corresponding rank:

...svg.append("path").datum(d.values)....


Comments

Popular posts from this blog

node.js - Mongoose: Cast to ObjectId failed for value on newly created object after setting the value -

[C++][SFML 2.2] Strange Performance Issues - Moving Mouse Lowers CPU Usage -

ios - Possible to get UIButton sizeThatFits to work? -