我正在使用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);
我期待着任何帮助, 尊敬的安德鲁
答案 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);
你会得到一个这样的图表:
关于第一点,请考虑以下图表:
有四个“最高”范围阀门,因此与最高值相对应的域值将为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);