package jas.hist; import jas.plot.DataArea; import jas.plot.DoubleAxis; import jas.plot.Legend; final class IntegerDataManager extends BinnedDataManager { IntegerDataManager(JASHist plot, DataArea da, Legend l, StatisticsBlock stats, int bins) { super(plot, da,l,stats,bins); // Configure the Axes xAxis = new DoubleAxis(); DoubleAxis yAxis = new DoubleAxis(); yAxis.setUseSuggestedRange(true); xm.setDataManager(this,true, xAxis); ym[0].setDataManager(this,false,yAxis); new DoubleAxisListener(xm); xm.setBins(bins); targetBins = bins; } JASHistData add(DataSource data) { if (data instanceof Rebinnable1DHistogramData) { Rebinnable1DHistogramData d = (Rebinnable1DHistogramData) data; // We only support adding items with integer axes if (d.getAxisType() != d.INTEGER) throw new DataManagerException("Incompatible data type for axis"); } else { XYDataSource d = (XYDataSource) data; // We only support adding items with integer axes if (d.getAxisType() != d.INTEGER) throw new DataManagerException("Incompatible data type for axis"); } return super.add(data); } protected void calcMinMaxBins(double x1, double x2) { int binWidth = (int) (1 + (x2-x1)/targetBins); int bins = (int) (1+(x2-x1)/binWidth); xLow = x1 - 0.5; double product = (double)binWidth*(double)bins; // See JAS-170 xHigh = xLow + product; double oldXMin = xAxis.getPlotMin(); double oldXMax = xAxis.getPlotMax(); if (xLow != oldXMin || xHigh != oldXMax) { xm.setBins(bins); xAxis.setMin(xLow); xAxis.setMax(xHigh); xAxis.getAxis().invalidate(); } } private DoubleAxis xAxis; private int targetBins; }