Пример #1
0
  /** 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;
  }
Пример #2
0
  /** 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);
        }
      }
    }
  }