var dataset = [ { group: "Grp 1", count: 0}, { group: "Grp 2", count: 0}, { group: "Grp 3", count: 0}, { group: "Grp 4", count: 0}, { group: "Grp 5", count: 0}, { group: "Grp 6", count: 0}, ]; var REFRESH_THRESHOLD = 100; var BAR_HEIGHT = 25; var BAR_WIDTH = 2; var BREAK_AT_COUNT = 5; var render_bars = function(){ var flags = [], unique_groups=[], l = dataset.length, i; flags = []; for( i=0; i BREAK_AT_COUNT){ to_subtract = new_dataset[BREAK_AT_COUNT].x-new_dataset[1].x; } else{ to_subtract = xScale(BREAK_AT_COUNT)-xScale(1); } barArray.enter() .append('g') .attr("class", "barArray") .append("rect") .style("fill", function(d,i){return (i+1)%BREAK_AT_COUNT==0 ? '#0000ff' : '#ff0000'}) .attr("width", function(d,i){return (i+1)%BREAK_AT_COUNT==0 ? (xScale(BREAK_AT_COUNT) - xScale(2)) : BAR_WIDTH}) .attr("height", function(d,i){return (i+1)%BREAK_AT_COUNT==0 ? 2 : BAR_HEIGHT}) .attr("transform", function(d,i){var rotate_string = (i+1)%BREAK_AT_COUNT==0 ? "rotate(0 0 0)" : "rotate(0)"; var translate_string = (i+1)%BREAK_AT_COUNT==0 ? ("translate("+ (d.x-to_subtract)+ "," + (yScale(d.y)) +")") : ("translate("+ d.x + "," + (yScale(d.y)-BAR_HEIGHT/2) +")"); return translate_string + " " + rotate_string; }) var tooltip = d3.select("#chart") .append('div') .attr('class', 'tooltip'); tooltip.append('div') .attr('class', 'group'); svg.selectAll("rect") .on('mouseover', function(d,i) { tooltip.select('.group').html("Group: " + d.group+ ""); tooltip.style('display', 'block'); tooltip.style('opacity',2); }) .on('mousemove', function(d) { tooltip.style('top', (d3.event.layerY + 10) + 'px') .style('left', (d3.event.layerX - 25) + 'px'); }) .on('mouseout', function() { tooltip.style('display', 'none'); tooltip.style('opacity',0); }); } function refresh_data() { var random_index = Math.floor(Math.random() * 6); dataset[random_index].count += 1; if(dataset[random_index].count > REFRESH_THRESHOLD){ dataset = [ { group: "Grp 1", count: 0}, { group: "Grp 2", count: 0}, { group: "Grp 3", count: 0}, { group: "Grp 4", count: 0}, { group: "Grp 5", count: 0}, { group: "Grp 6", count: 0}, ]; } $("#chart").empty(); render_bars(); } var refreshId; function start_animation(){ refreshId = setInterval(refresh_data, 500); $("#manual_add").prop('disabled', true); $("#start_animation").prop('disabled', true); $("#stop_animation").prop('disabled', false); } function stop_animation(){ clearInterval(refreshId); $("#manual_add").prop('disabled', false); $("#start_animation").prop('disabled', false); $("#stop_animation").prop('disabled', true); } start_animation();