如何在JFreeChart的多范围Y轴中根据数值获取对应轴的名称?
获取Y轴变量名称并显示在标签中
我明白你的需求啦——现在你能拿到Y轴的数值,但想在标签里把对应的变量名称也加上,这样鼠标悬停时能清楚知道是哪个指标的数值。咱们来改改代码就行:
首先,你可以通过XYDataSet获取对应的系列(Series),每个系列其实就对应你Y轴的一个变量,系列的Key就是变量名称。在你的代码里,只需要加一行获取名称的代码,然后把它和数值拼接起来显示在标签里。
修改后的代码如下:
public void chartMouseMoved(ChartMouseEvent event){ ChartEntity chartEntity = event.getEntity(); if ( chartEntity instanceof XYItemEntity) { XYItemEntity xyItemEntity = (XYItemEntity) chartEntity; XYDataSet xyDataSet = xyItemEntity.getDataset(); int seriesIndex = xyItemEntity.getSeriesIndex(); // 获取对应Y轴变量的名称(系列的Key) Comparable<?> seriesName = xyDataSet.getSeries(seriesIndex).getKey(); // 转成字符串,如果名称为空可以给个默认值 String variableName = seriesName != null ? seriesName.toString() : "未命名变量"; double xValue = xyDataSet.getXValue(seriesIndex, xyItemEntity.getItem()); double yValue = xyDataSet.getYValue(seriesIndex, xyItemEntity.getItem()); this.xCrosshair.setValue(xValue); this.yCrosshair.setValue(yValue); // 把变量名称和数值拼接起来显示 label.setText(String.format("%s: %.2f", variableName, yValue)); label.setSize(label.getPreferredSize()); } }
关键说明:
xyDataSet.getSeries(seriesIndex):通过系列索引获取对应的系列对象,每个系列对应你Y轴的一个变量。getKey():系列的Key就是你当初创建系列时设置的名称(比如XYSeries series = new XYSeries("温度");里的"温度"就是Key)。- 加了空值判断,避免如果系列名称为空时出现异常,给个默认的"未命名变量"兜底。
这样修改后,鼠标悬停在图表数据点上时,标签就会显示类似温度: 25.67这样的内容,清晰展示变量名称和对应数值啦!
内容的提问来源于stack exchange,提问作者shnnens
相关产品推荐
相关产品推荐

