Name
global.CategoryChart
Description
CategoryChart wrapper for JFreeChart. This class should provide an easier way to create charts that are category based. It allows for the addition of multiple dataset, axes and renderers.
Script
var CategoryChart = Class.create();
CategoryChart.Types = {
LINE_AND_SHAPE: "LINE_AND_SHAPE",
LINE: "LINE",
SHAPE: "SHAPE",
BAR: "BAR",
AREA: "AREA"
};
CategoryChart.LabelPositions = {
STANDARD: Packages.org.jfree.chart.axis.CategoryLabelPositions.STANDARD,
DOWN_45: Packages.org.jfree.chart.axis.CategoryLabelPositions.DOWN_45,
DOWN_90: Packages.org.jfree.chart.axis.CategoryLabelPositions.DOWN_90,
UP_45: Packages.org.jfree.chart.axis.CategoryLabelPositions.UP_45,
UP_90: Packages.org.jfree.chart.axis.CategoryLabelPositions.UP_90
};
CategoryChart.getNewDataset = function(){
return new Packages.org.jfree.data.category.DefaultCategoryDataset();
};
CategoryChart.prototype = {
// Java classes used
BasicStroke: Packages.java.awt.BasicStroke,
Color: Packages.java.awt.Color,
JFreeChart: Packages.org.jfree.chart.JFreeChart,
CategoryAxis: Packages.org.jfree.chart.axis.CategoryAxis,
NumberAxis: Packages.org.jfree.chart.axis.NumberAxis,
CategoryPlot: Packages.org.jfree.chart.plot.CategoryPlot,
DatasetRenderingOrder: Packages.org.jfree.chart.plot.DatasetRenderingOrder,
PlotOrientation: Packages.org.jfree.chart.plot.PlotOrientation,
AreaRenderer: Packages.org.jfree.chart.renderer.category.AreaRenderer,
BarRenderer: Packages.org.jfree.chart.renderer.category.BarRenderer,
CategoryItemRenderer: Packages.org.jfree.chart.renderer.category.CategoryItemRenderer,
LineAndShapeRenderer: Packages.org.jfree.chart.renderer.category.LineAndShapeRenderer,
NumberAxis: Packages.org.jfree.chart.axis.NumberAxis,
initialize: function(title, xAxisLabel, yAxisLabel){
this.datasetIndex = 0;
this.rendererIndex = 0;
this.domainIndex = 0;
this.rangeIndex = 0;
var domainAxis = new this.CategoryAxis(xAxisLabel);
var rangeAxis = new this.NumberAxis(yAxisLabel);
this.plot = new this.CategoryPlot();
this.plot.setDomainAxis(this.domainIndex++, domainAxis);
this.plot.setRangeAxis(this.rangeIndex++, rangeAxis);
this.plot.setDomainGridlinesVisible(true);
this.plot.setRangeGridlinesVisible(true);
this.plot.setOrientation(this.PlotOrientation.VERTICAL);
this.chart = new this.JFreeChart(title, this.plot);
this.chart.setAntiAlias(true);
this.chart.setBackgroundPaint(this.Color.white);
},
getChart: function(){
return this.chart;
},
addSeries: function(type, dataset){
this.addSeriesData(dataset);
this.addSeriesRenderer(type);
},
addSeriesData: function(dataset){
this.plot.setDataset(this.datasetIndex++, dataset);
return this.datasetIndex;
},
setSeriesData: function(dataset, index){
this.plot.setDataset(index, dataset);
},
addSeriesRenderer: function(type){
switch (type) {
case CategoryChart.Types.BAR:
this.plot.setRenderer(this.rendererIndex++, new this.BarRenderer());
break;
case CategoryChart.Types.LINE_AND_SHAPE:
this.plot.setRenderer(this.rendererIndex++, new this.LineAndShapeRenderer(true, true));
break;
case CategoryChart.Types.LINE:
this.plot.setRenderer(this.rendererIndex++, new this.LineAndShapeRenderer(true, false));
break;
case CategoryChart.Types.SHAPE:
this.plot.setRenderer(this.rendererIndex++, new this.LineAndShapeRenderer(false, true));
break;
case CategoryChart.Types.AREA:
this.plot.setRenderer(this.rendererIndex++, new this.AreaRenderer());
break;
default:
this.plot.setRenderer(this.rendererIndex++, new this.BarRenderer());
}
return this.rendererIndex;
},
setRenderer: function(renderer, index){
this.plot.setRenderer(index, renderer);
},
setCategoryMargin: function(margin, index){
this.plot.getDomainAxis(index).setCategoryMargin(margin);
},
setLowerMargin: function(margin, index){
this.plot.getDomainAxis(index).setLowerMargin(margin);
},
setUpperMargin: function(margin, index){
this.plot.getDomainAxis(index).setUpperMargin(margin);
},
setDomainGridlinesVisible: function(value){
this.plot.setDomainGridlinesVisible(value);
},
setRangeGridlinesVisible: function(value){
this.plot.setRangeGridlinesVisible(value);
},
/**
* @param r - red
* @param g - green
* @param b - blue
* @param a - alpha
* @param rendererIdx - index of the renderer
* @param seriesIdx - index of the data series associated with the renderer
*/
setSeriesColorRGB: function(r, g, b, a, rendererIdx, seriesIdx){
var max = 255;
this.plot.getRenderer(rendererIdx).setSeriesPaint(seriesIdx, new this.Color(r / max, g / max, b / max, a / max));
},
/**
*
* @param hex - something like this #A1A1A1
* @param rendererIdx - index of the renderer
* @param seriesIdx - index of the data series associated with the renderer
*/
setSeriesColorHex: function(hex, rendererIdx, seriesIdx){
this.plot.getRenderer(rendererIdx).setSeriesPaint(seriesIdx, this.Color.decode(hex));
},
/**
*
* @param width
* @param rendererIdx - index of the renderer
* @param seriesIdx - index of the data series associated with the renderer
*/
setSeriesStroke: function(width, rendererIdx, seriesIdx){
this.plot.getRenderer(rendererIdx).setSeriesStroke(seriesIdx, new this.BasicStroke(width));
},
setDatasetRenderingOrderForward: function(){
this.plot.setDatasetRenderingOrder(this.DatasetRenderingOrder.FORWARD);
},
setDatasetRenderingOrderReverse: function(){
this.plot.setDatasetRenderingOrder(this.DatasetRenderingOrder.REVERSE);
},
setPlotOrientationVertical: function(){
this.plot.setOrientation(this.PlotOrientation.VERTICAL);
},
setPlotOrientationHorizontal: function(){
this.plot.setOrientation(this.PlotOrientation.HORIZONTAL);
},
setRangeTicksToWholeNumbers: function(rangeIndex){
this.plot.getRangeAxis(rangeIndex).setStandardTickUnits(this.NumberAxis.createIntegerTickUnits());
},
setDomainTickLabelPosition: function(pos){
this.plot.getDomainAxis().setCategoryLabelPositions(pos);
},
type: "CategoryChart"
};
Sys ID
9283290237102000a08a40ed9dbe5dde