in web/servicemix-web-console/src/main/webapp/js/plotkit/Layout.js [318:373]
PlotKit.Layout.prototype._evaluateBarCharts = function() {
var keys = MochiKit.Base.keys;
var items = MochiKit.Base.items;
var setCount = keys(this.datasets).length;
// work out how far separated values are
var xdelta = 10000000;
var xvalues = this._uniqueXValues();
for (var i = 1; i < xvalues.length; i++) {
xdelta = Math.min(Math.abs(xvalues[i] - xvalues[i-1]), xdelta);
}
var barWidth = 0;
var barWidthForSet = 0;
var barMargin = 0;
if (xvalues.length == 1) {
// note we have to do something smarter if we only plot one value
xdelta = 1.0;
this.xscale = 1.0;
this.minxval = xvalues[0];
barWidth = 1.0 * this.options.barWidthFillFraction;
barWidthForSet = barWidth/setCount;
barMargin = (1.0 - this.options.barWidthFillFraction)/2;
}
else {
// readjust xscale to fix with bar charts
this.xscale = (1.0 - xdelta/this.xrange)/this.xrange;
barWidth = xdelta * this.xscale * this.options.barWidthFillFraction;
barWidthForSet = barWidth / setCount;
barMargin = xdelta * this.xscale * (1.0 - this.options.barWidthFillFraction)/2;
}
this.minxdelta = xdelta; // need this for tick positions
// add all the rects
this.bars = new Array();
var i = 0;
for (var setName in this.datasets) {
var dataset = this.datasets[setName];
for (var j = 0; j < dataset.length; j++) {
var item = dataset[j];
var rect = {
x: ((parseFloat(item[0]) - this.minxval) * this.xscale) + (i * barWidthForSet) + barMargin,
y: 1.0 - ((parseFloat(item[1]) - this.minyval) * this.yscale),
w: barWidthForSet,
h: ((parseFloat(item[1]) - this.minyval) * this.yscale),
xval: parseFloat(item[0]),
yval: parseFloat(item[1]),
name: setName
};
this.bars.push(rect);
}
i++;
}
};