//http://blockbuilder.org/ivanempire/b6a1d0d2c5bc40a1e3f85b8980f189ef //https://bl.ocks.org/mbostock/4060954 // Parse the year variable var parseYear = d3.timeParse("%Y-%m"); // Format the year variable var formatYear = d3.timeFormat("%B,%Y"); var keyarray = []; var div = d3.select("body").append("div") .attr("class", "tooltip") .style("opacity", 0); d3.csv('demo.csv', function(err, d){ if(err) console.log(err); //console.log(d) var nested_data = d3.nest() .key(function(d) { return d.year; }) .entries(d); var trddata = nested_data.map(function(d){ var obj = { month: new Date(d.key) } d.values.forEach(function(v){ obj[v.Keyword] = +v.Popularity; if(!keyarray.includes(d.Keyword)){ keyarray.push(d.Keyword); } }) // console.log(obj) return obj; }) // console.log(trddata) buildStreamGraph(trddata); }) d3.csv('gucci.csv', function(err, d){ if(err) console.log(err); //console.log(d) var nested_data = d3.nest() .key(function(d) { return d.Year; }) .entries(d); // console.log(nested_data); var trddata2 = nested_data.map(function(d){ var obj = { month: new Date(d.key) } d.values.forEach(function(v){ obj[v.Keyword] = +v.Popularity; if(!keyarray.includes(d.Keyword)){ keyarray.push(d.Keyword); } }) // console.log(obj) return obj; }) // console.log(trddata) buildStreamGraph2(trddata2); }) function buildStreamGraph(trddata) { var data = trddata; var stack = d3.stack() .keys(["Louis Vuitton", "Gucci", "Honcho", "Humble", "LSD", "Pablo", "Panda", "Raf Simons", "Savage", "Thrift", "Uber", "Versace"]) .order(d3.stackOrderNone) .offset(d3.stackOffsetWiggle); var series = stack(data); var width = 400, height = 1000; var x = d3.scaleTime() .domain(d3.extent(data, function(d){ return d.month; })) .range([50, 800]); // setup axis var xAxis = d3.axisLeft(x); var y = d3.scaleLinear() .domain([0, d3.max(series, function(layer) { return d3.max(layer, function(d){ return d[0] + d[1];}); })]) .range([333, -300]); var color = d3.scaleOrdinal(d3["schemePaired"]) var area = d3.area() .y(function(d) { return x(d.data.month); }) .x0(function(d) { return y(d[0]); }) .x1(function(d) { return y(d[1]); }) .curve(d3.curveBasis); var svg = d3.select("body").append("svg") .attr("width", width) .attr("height", height); var keywordtemp; svg.selectAll("path") .data(series) .enter().append("path") .attr("d", area) .style("fill", function(d,i) { return color(i); }) .on('mouseover', function(d){ d3.select(this).style('fill',d3.rgb( d3.select(this).style("fill") ).brighter()); d3.select("#major").text(d.key); div.transition() .duration(200) .style("opacity", .9); var array = []; array = d.values; console.log(d); keywordtemp = d.key; var xPosition = d3.mouse(this)[0]-50; var yPosition = d3.mouse(this)[1]-50; yPosition = Math.floor(yPosition/4.65116279); // console.log(xPosition); console.log(yPosition); console.log(d[yPosition].data.month); console.log(d[yPosition].data); var temporary = {}; temporary = d[yPosition].data; console.log(temporary); console.log(keywordtemp); console.log(temporary[keywordtemp]); div .html(d.key + "
" + formatYear(d[yPosition].data.month) + "
" + temporary[keywordtemp]) .style("left", (d3.event.pageX) + "px") .style("top", (d3.event.pageY - 28) + "px"); }) // .on('mouseover',function(d){ // div.transition() // .duration(200) // .style("opacity", .9); // div .html(formatYear(d.key) + "
" + d.key.Popularity) // .style("left", (d3.event.pageX) + "px") // .style("top", (d3.event.pageY - 28) + "px"); // }) .on('mouseout', function(d){ d3.select(this).style('fill', d3.rgb( d3.select(this).style("fill") ).darker()); d3.select("#major").text("Mouse over"); div.transition() .duration(200) .style("opacity", 0); }) .on('mousemove',function(d){ var xPosition = d3.mouse(this)[0]-50; var yPosition = d3.mouse(this)[1]-50; yPosition = Math.floor(yPosition/4.65116279); // console.log(xPosition); console.log(yPosition); console.log(d[yPosition].data.month); console.log(d[yPosition].data); var temporary = {}; temporary = d[yPosition].data; console.log(temporary); console.log(keywordtemp); console.log(temporary[keywordtemp]); div .html(d.key + "
" + formatYear(d[yPosition].data.month) + "
" + temporary[keywordtemp]) .style("left", (d3.event.pageX) + "px") .style("top", (d3.event.pageY - 28) + "px"); }) svg.append("g") .attr("class", "axis axis--x") .attr("transform", "translate(" + (width) + ")",0) .call(xAxis); } function buildStreamGraph2(trddata) { var data = trddata; var stack = d3.stack() .keys(["Gucci"]) .order(d3.stackOrderNone) .offset(d3.stackOffsetWiggle); var series = stack(data); var width = 400, height = 1000; var x = d3.scaleTime() .domain(d3.extent(data, function(d){ return d.month; })) .range([50, 800]); // setup axis var xAxis = d3.axisBottom(x); var y = d3.scaleLinear() .domain([0, d3.max(series, function(layer) { return d3.max(layer, function(d){ return d[0] + d[1];}); })]) .range([200, 100]); var color = d3.scaleOrdinal(d3["schemePaired"]) var area = d3.area() .y(function(d) { return x(d.data.month); }) .x0(function(d) { return y(d[0]); }) .x1(function(d) { return y(d[1]); }) .curve(d3.curveBasis); var svg = d3.select("body").append("svg") .attr("width", width) .attr("height", height); svg.selectAll("path") .data(series) .enter().append("path") .attr("d", area) .style("fill", function(d,i) { return color(i); }) .on('mouseover', function(d){ d3.select(this).style('fill',d3.rgb( d3.select(this).style("fill") ).brighter()); d3.select("#major").text(d.key); }) .on('mouseout', function(d){ d3.select(this).style('fill', d3.rgb( d3.select(this).style("fill") ).darker()); d3.select("#major").text("Mouse over"); }) .on('mousemove',function(d){ var xPosition = d3.mouse(this)[0] - 5; var yPosition = d3.mouse(this)[1] - 5; console.log(xPosition); console.log(yPosition); }) svg.append("g") .attr("class", "axis axis--x") .attr("transform", "translate(0," + (height) + ")") .call(xAxis); } // start on the selection grid // function gridData() { // var data = new Array(); // var xpos = 1; //starting xpos and ypos at 1 so the stroke will show when we make the grid below // var ypos = 1; // var width = 200; // var height = 60; // var click = 0; // // iterate for rows // for (var row = 0; row < 5; row++) { // data.push( new Array() ); // // iterate for cells/columns inside rows // for (var column = 0; column < 4; column++) { // data[row].push({ // x: xpos, // y: ypos, // width: width, // height: height, // click: click // }) // // increment the x position. I.e. move it over by 50 (width variable) // xpos += width; // } // // reset the x position after a row is complete // xpos = 1; // // increment the y position for the next row. Move it down 50 (height variable) // ypos += height; // } // return data; // } // var gridData = gridData(); // // I like to log the data to the console for quick debugging // console.log(gridData); // var grid = d3.select("#streamSelector") // .append("svg") // .attr("width",1000) // .attr("height",320); // var row = grid.selectAll(".row") // .data(gridData) // .enter().append("g") // .attr("class", "row"); // var column = row.selectAll(".square") // .data(function(d) { return d; }) // .enter().append("rect") // .attr("class","square") // .attr("x", function(d) { return d.x; }) // .attr("y", function(d) { return d.y; }) // .attr("width", function(d) { return d.width; }) // .attr("height", function(d) { return d.height; }) // .style("fill", "#fff") // .style("stroke", "#222") // .on('click', function(d) { // d.click ++; // if ((d.click)%4 == 0 ) { d3.select(this).style("fill","#fff"); } // if ((d.click)%4 == 1 ) { d3.select(this).style("fill","#2C93E8"); } // if ((d.click)%4 == 2 ) { d3.select(this).style("fill","#F56C4E"); } // if ((d.click)%4 == 3 ) { d3.select(this).style("fill","#838690"); } // });