<canvas id="tutorial1" width="350" height="200" style="border: 1px solid black;"> <script> var canvas = document.getElementById('tutorial1'); var ctx = canvas.getContext('2d'); ht = canvas.height; wt = canvas.width ; var data = {}; data.gtype = 'line'; data.title = 'hey! title goes here'; data.data = [['Q1',10],['Q2',20],['Q3',30],['Q4',40],['Q5',25]]; ctx.drawCross = function (x,y){ this.beginPath(); this.moveTo(x + 5, y + 5); this.lineTo(x - 5, y - 5); this.closePath(); this.stroke(); this.beginPath(); this.moveTo(x - 5, y + 5); this.lineTo(x + 5, y - 5); this.closePath(); this.stroke(); } ctx.fillStyle = "Red"; ctx.beginPath(); ctx.moveTo(40,10); ctx.lineTo(40,ht-40); ctx.lineTo(wt-10,ht-40); ctx.stroke(); ctx.closePath(); /* draw title*/ len = ctx.measureText (data.title); ctx.fillText(data.title, (wt -len.width) /2 , ht-5 ); x = 40; y = 10; var datArray = []; for( i =0 ; i < data.data.length ; i++ ){ datArray.push( data.data[i][1]); } MAX = Math.max.apply(null, datArray) ; Ratio = ( ht - x - y - 10 ) / MAX ; xadjust = ( ( wt - 50 ) / datArray.length ) - 5 ; tasks = []; tasks.popall=function(){ if(this.length == 0) return this; while(this.length != 0) eval(this.pop()); return this; }; ctx.fillStyle = "Black"; for( i =0 ; i < data.data.length ; i++ ){ d = data.data[i][1]; hhh = Ratio*d ; y = ht-40-hhh; x = x + xadjust; if(data.gtype=='bar'){ ctx.fillRect( x , y , 5 , hhh ); } else if(data.gtype=='line'){ if(i!=0){ ctx.lineTo(x,y); }else{ ctx.beginPath(); ctx.moveTo(x,y); } tasks.push( 'ctx.drawCross('+eval(x)+','+eval(y)+')' ) ; } ctx.fillText( data.data[i][0] , x , ht - 28 ); /*ctx.fillText( data.data[i][1] , 20 , y+5 );*/ } if(data.gtype=='line'){ ctx.stroke(); tasks.popall(); } <⁄script>
Just by changing the data.gtype from 'line' to 'bar' on line 7, the graph type can be changed.
I know that there are a lot of to-do's here. A small list would be:
- Titles for the x and y axes.
- Markers for the y-axis
- Clearing up the code and commenting it so as to make it easier to follow.
Comments
Post a Comment