0

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

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

但是如何从最大范围值中得到对应的域值呢?

例如,我的最高值(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);

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

4

1 回答 1

1

关于您的第二点,您正在找到 Range 最大值,但将标记添加到 Domain 轴。如果您这样修改代码:

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);

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

在此处输入图像描述

在你的第一点,考虑这个图表:

在此处输入图像描述

有四个“最大”范围阀,因此对应于最大值的域值将是 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);

在此处输入图像描述

于 2012-11-15T09:02:29.630 回答