From a62ebb1d3554911fbb2c399d7ac9571df92151fc Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Mon, 23 Jan 2012 23:40:25 +0000 Subject: graphing multiple --- test/when/when.js | 168 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 107 insertions(+), 61 deletions(-) diff --git a/test/when/when.js b/test/when/when.js index 4e0e6be..f2e3901 100644 --- a/test/when/when.js +++ b/test/when/when.js @@ -16,23 +16,45 @@ aim for today: have a few items that can be chosen */ var data,raphael,classOfRange,birthplaces,colleges,locations,fields; - var graphData; - var maxPaths; - +var graph,bgGraph; +var graphs; +var numYears,gutterX,gutterY,gridX,gridY; +var startPath; + window.onload = function() { loadData(); createMenu(); //alert(document.getElementById("holder").offsetWidth+","+document.getElementById("holder").offsetHeight); //seems predictable, gives same result in chrome, firefox, mobile safari - var graph=document.getElementById('graph'); - raphael = new Raphael(graph, graph.offsetWidth, graph.offsetHeight); - drawGraph(); + var graphDiv=document.getElementById('graph'); + raphael = new Raphael(graphDiv, graphDiv.offsetWidth, graphDiv.offsetHeight); + gutterX=10, + gutterY=16; + gridX=(raphael.width-(gutterX*2))/numYears; + gridY=(raphael.height-(gutterY*2)); + drawGrid(); + + var color = "hsl(" + [.6, .5, .5] + ")"; + graph = raphael.path().attr({stroke: color, "stroke-width": 4, "stroke-linejoin": "round"}); + bgGraph = raphael.path().attr({stroke: "none", opacity: .3, fill: color}); + + maxPaths=8; + graphs=[]; + startPath=["M", gutterX , raphael.height - gutterY, "L", raphael.width-gutterX, raphael.height - gutterY]; + for (var i=0;i/n"; + menu+="\n"; + document.getElementById("menus").innerHTML=menu; +} + +function drawOneGraph(which,time){ + var datum=fields[which]; + var datelem=graphData[datum].getKeys()[0]; + + //draw 1 or multiple graphs. animate between items + //maximum number of graphs //construct graph - var graph = raphael.path().attr({stroke: color, "stroke-width": 4, "stroke-linejoin": "round"}), - bgGraph = raphael.path().attr({stroke: "none", opacity: .3, fill: color}); - //default graph is 'Class size' - //find largest class - var classSize=[]; - for (var i=0;i<=numYears;i++) classSize[i]=0; - for (var i in data) { - classSize[parseInt(data[i].classOf)-classOfRange.start]++; - } - var classMax=0; - for (var i in classSize) classMax=Math.max(classMax,classSize[i]); + var path,bgPath; - var stepY=(gridY/classMax); + var stepY=(gridY/graphData[datum].max); for (var i=0;i<=numYears;i++) { var x=gutterX+(i*gridX), - y=raphael.height-gutterY-(stepY*classSize[i]); + y=raphael.height-gutterY-(stepY*graphData[datum].getValue(datelem,i+classOfRange.start)); if (!i) { path=["M",x,y,"C",x,y]; bgPath=["M", gutterX , raphael.height - gutterY, "L", x, y, "C", x, y]; } if (i&&i/n"; - menu+="\n"; - document.getElementById("menus").innerHTML=menu; + graph.animate({path: path},time,'easeIn'); + bgGraph.animate({path: bgPath},time,'easeIn'); } -function doGraph(which){ +function drawGraph(which,time){ + var datum=fields[which]; + var keys=graphData[datum].getKeys(); + //draw 1 or multiple graphs. animate between items //maximum number of graphs - alert(fields[which]); + //construct graph + + var paths=[]; + var stepY=(gridY/graphData[datum].max); + for (var k in keys) { + for (var i=0;i<=numYears;i++) { + var x=gutterX+(i*gridX), + y=raphael.height-gutterY-(stepY*graphData[datum].getValue(keys[k],i+classOfRange.start)); + if (!i) { + paths[k]=["M",x,y,"C",x,y]; + } + if (i&&i