/** Get the FrequencyDistribution object */ protected FrequencyDistribution getFrequencyDistribution(Variate data, int minimumBinCount) { double min = (Double) data.getMin(); double max = (Double) data.getMax(); if (min == max) { if (min == 0) { min = -1.0; } else { min -= Math.abs(min / 10.0); } if (max == 0) { max = 1.0; } else { max += Math.abs(max / 10.0); } } Axis axis = new LinearAxis(Axis.AT_MAJOR_TICK, Axis.AT_MAJOR_TICK); axis.setRange(min, max); int majorTickCount = axis.getMajorTickCount(); axis.setPrefNumTicks(majorTickCount, 4); double binSize = axis.getMinorTickSpacing(); int binCount = (int) ((axis.getMaxAxis() - axis.getMinAxis()) / binSize) + 2; if (minimumBinCount > 0) { while (binCount < minimumBinCount) { majorTickCount++; axis.setPrefNumTicks(majorTickCount, 4); binSize = axis.getMinorTickSpacing(); binCount = (int) ((axis.getMaxAxis() - axis.getMinAxis()) / binSize) + 2; // should +2, otherwise the last bar will lose } } FrequencyDistribution frequency = new FrequencyDistribution(axis.getMinAxis(), binCount, binSize); for (int i = 0; i < raw.getCount(); i++) { frequency.addValue((Double) raw.get(i)); } return frequency; }
/** Paint data series */ protected void paintData(Graphics2D g2, Variate.N xData, Variate.N yData) { double x1, y1, x2, y2; double lower = 0.0, upper = 0.0; int n = xData.getCount(); if (hasQuantiles) { lower = raw.getQuantile(quantiles); upper = raw.getQuantile(1.0 - quantiles); } else if (hasIntervals) { lower = lowerInterval; upper = upperInterval; } g2.setStroke(lineStroke); for (int i = 0; i < n; i += 2) { x1 = (Double) xData.get(i); y1 = (Double) yData.get(i); x2 = (Double) xData.get(i + 1); y2 = (Double) yData.get(i + 1); if (y1 != y2) { if (barPaint != null) { if (hasQuantiles || hasIntervals) { if (x1 < lower) { if (x2 <= lower) { g2.setPaint(quantilePaint); fillRect(g2, x1, y1, x2, y2); } else { g2.setPaint(quantilePaint); fillRect(g2, x1, y1, lower, y2); g2.setPaint(barPaint); fillRect(g2, lower, y1, x2, y2); } } else if (x2 > upper) { if (x1 >= upper) { g2.setPaint(quantilePaint); fillRect(g2, x1, y1, x2, y2); } else { g2.setPaint(barPaint); fillRect(g2, x1, y1, upper, y2); g2.setPaint(quantilePaint); fillRect(g2, upper, y1, x2, y2); } } else { g2.setPaint(barPaint); fillRect(g2, x1, y1, x2, y2); } } else if (hasIncredibleSet) { if (traceDistribution.inCredibleSetContains((int) x1) || traceDistribution.inCredibleSetContains((int) x2)) { g2.setPaint(quantilePaint); } else { g2.setPaint(barPaint); } fillRect(g2, x1, y1, x2, y2); } else { g2.setPaint(barPaint); fillRect(g2, x1, y1, x2, y2); } } if (lineStroke != null && linePaint != null) { g2.setStroke(lineStroke); g2.setPaint(linePaint); drawRect(g2, x1, y1, x2, y2); } } } }