从JfreeChart中的最大范围值获取域值

时间:2012-11-15 07:06:10

标签: java dataset plot jfreechart

我正在使用JFreeChart 1.0.14,我想从最大范围值获取域值。我使用XYLineChart,现在我使用以下代码获得范围值的最大值:

Number maximum = DatasetUtilities.findMaximumRangeValue(dataset);
maximum.floatValue();
String intensityMax = String.valueOf(maximum);
test.setText(intensityMax); //test is a jTextField

但是如何从最大范围值中获取相应的域值?

e.g。我的最高值(y轴)是8212,对应于510(x轴)。如何获得Y的相应值?

与此问题相关,我还有另一个问题。我想将ValueMarker放到最大范围值。不,我试过这个,但我不明白问题在哪里(我没有得到错误,没有任何反应):

Number maximum = DatasetUtilities.findMaximumRangeValue(dataset);
ValueMarker max = new ValueMarker(maximum.floatValue());
max.setPaint(Color.orange);
max.setLabel("highest value");
plot.addDomainMarker(max);

我期待着任何帮助, 尊敬的安德鲁

1 个答案:

答案 0 :(得分:1)

关于第二个点,您将找到范围最大值,但将标记添加到域轴。如果您修改代码:

Number maximum = DatasetUtilities.findMaximumRangeValue(dataset);
ValueMarker max = new ValueMarker(maximum.floatValue());
max.setPaint(Color.orange);
max.setLabel("Highest Value");
max.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
plot.addRangeMarker(max,Layer.BACKGROUND);

你会得到一个这样的图表:

enter image description here

关于第一点,请考虑以下图表:

enter image description here

有四个“最高”范围阀门,因此与最高值相对应的域值将为2.5,4,6.g和8.XYSeries没有提供单一范围(y)值。

你可以这样做

    Number xValue = DatasetUtilities.findMinimumDomainValue(dataset);
    for (int seriesIndex = 0 ; seriesIndex < dataset.getSeriesCount() ; seriesIndex++){
        for (int itemIndex = 0 ; itemIndex < dataset.getItemCount(seriesIndex) ; itemIndex ++){
            Number yValue = dataset.getY(seriesIndex, itemIndex);
            if (yValue.equals(maximum)){
                if (dataset.getX(seriesIndex, itemIndex).floatValue() > xValue.floatValue())
                    xValue = dataset.getX(seriesIndex, itemIndex);
            }
        }
    }
    ValueMarker maxX = new ValueMarker(xValue.floatValue());
    maxX.setPaint(Color.red);
    maxX.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
    plot.addDomainMarker(maxX,Layer.BACKGROUND);

enter image description here