(function() { "use strict"; function HumbleData(){ this.original = [ {"title":"Humble","dimension":"data","terjedelem":[20,80],"ranges":[30,40,50,60,70],"rangesLine":[50],"measures":[30,40,60,70],"markers":[50,50]} ] } function Data(){ this.original = [ {"title":"Man","dimension":"height","terjedelem":[20,80],"ranges":[30,40,50,60,70],"rangesLine":[50],"measures":[38.93,47.15,63.59,71.81],"markers":[55.37,50]}, {"title":"Woman","dimension":"height","terjedelem":[20,80],"ranges":[30,40,50,60,70],"rangesLine":[50],"measures":[27.02,35.82,53.44,62.24],"markers":[44.63,50]}, {"title":"Man","dimension":"weight","terjedelem":[20,80],"ranges":[30,40,50,60,70],"rangesLine":[50],"measures":[39.70,48.31,65.54,74.15],"markers":[56.93,50]}, {"title":"Woman","dimension":"weight","terjedelem":[20,80],"ranges":[30,40,50,60,70],"rangesLine":[50],"measures":[29.24,36.21,50.14,57.11],"markers":[43.18,50]} ] } var getData = new Data(); var data = getData.original; var getHumbleData = new HumbleData(); var dataHumble = getHumbleData.original; // take care! my english is terrible... // I need the whole path on my local server, I don't know why - must be something with Kohana 3.3 //d3.json("/assets/js/D3_Chart/D3.chart/examples_joey_GitHub/06_horizontal_vertical/scripts/bulleTs-data.json", function(error, data) { // this one was the original d3.json version for start - when bulleTs-data.json is in the same directory //d3.json("bulleTs-data.json", function(error, data) { // and this is mine for getting data from the above function Data() but it needs to be called again, as it is done below: bulleT(); function bulleT() { var myChartVertical = d3.select("#BulleT_vertical").chart("BulleTs", { seriesCount: data.length }); myChartVertical.margin({ top: 40, right: 20, bottom: 120, left: 5 }) .orientation("vertical") .width([45,"vertical"]) /* bit of a hack too. if array.length > 1 it means */ .height([350,"vertical"])/* that it is for vertical chart*/ .duration(1000); myChartVertical.draw(data); var myChartHorizontal = d3.select("#BulleT_horizontal").chart("BulleTs", { seriesCount: data.length }); myChartHorizontal.margin({ top: 5, right: 40, bottom: 20, left: 120 }) .orientation("horizontal") .width([350])/* as writen before. now array.length == 1, so it is for horizontal */ .height([45]) .duration(1000); myChartHorizontal.draw(data); /* as we don't know anything about sample statistics only subjet's score will change*/ /* that's what I call humble data */ var myChartVerticalHumble = d3.select("#BulleT_vertical_Humble").chart("BulleTs", { seriesCount: dataHumble.length }); myChartVerticalHumble.margin({ top: 40, right: 20, bottom: 120, left: 5 }) .orientation("vertical") .width([45,"vertical"]) .height([350,"vertical"]) .duration(1000); myChartVerticalHumble.draw(dataHumble); d3.selectAll("button#Randomize").on("click", function() { data.forEach(randomize); myChartVertical.draw(data); myChartHorizontal.draw(data); dataHumble.forEach(randomizeHumble); myChartVerticalHumble.draw(dataHumble); }); d3.selectAll("button#Reset").on("click", function() { getData = new Data(); data = getData.original; myChartVertical.draw(data); myChartHorizontal.draw(data); getHumbleData = new HumbleData(); dataHumble = getHumbleData.original; myChartVerticalHumble.draw(dataHumble); }); } function randomize(d) { var k = 10; if (!d.randomizer) d.randomizer = randomizer(d); d.markers[0] = d.randomizer(d.markers[0],40,60); d.markers[1] = d.randomizer(d.markers[1],21,78); k = d.randomizer(k,4,9); d.measures[0] = d.markers[0] - 2*k; d.measures[1] = d.markers[0] - k; d.measures[2] = d.markers[0] + k; d.measures[3] = d.markers[0] + 2*k; return d; } function randomizeHumble(d) { var k = 10; if (!d.randomizer) d.randomizer = randomizer(d); d.markers[1] = d.randomizer(d.markers[1],21,78); k = d.randomizer(k,4,9); return d; } // Returns a random integer between min and max // Using Math.round() will give you a non-uniform distribution! function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } function randomizer(d,min,max) { return function(d,min,max) { return getRandomInt(min,max); }; } bulleT(); })();