jfreechart 多个渲染器工具提示不起作用
jfreechart multiple renderers tooltip not working
我有一个包含 2 组图(检测和定位)的图形。第一组(本地化)是红色、橙色、粉色,第二组(检测)是蓝色、黑色、青色。我为每组创建了一个渲染器以设置颜色。我已将工具提示设置为 true,但是当我将鼠标悬停在第二组(检测)上时,我看不到标签。我只能在鼠标悬停时看到第一组的标签(见图),但看不到另一组的标签。这是我的代码:
JFreeChart avg_chart = ChartFactory.createTimeSeriesChart(
"Average detections and localizations" ,
"" ,
"" ,
null ,
true , true , false);
avg_chart.setBackgroundPaint(Color.WHITE);
final XYPlot plot = avg_chart.getXYPlot( );
plot.setDataset(0,this.dataset_local);
plot.setDataset(1,this.dataset_detect);
plot.setRangeAxis(0,new NumberAxis("Localizations"));
plot.setRangeAxis(1,new NumberAxis("Detections"));
plot.mapDatasetToRangeAxis(0, 0);
plot.mapDatasetToRangeAxis(1, 1);
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(true);
XYLineAndShapeRenderer renderer1 = (XYLineAndShapeRenderer) plot.getRenderer(0);//localization
renderer1.setSeriesPaint( 0 , Color.RED );
renderer1.setSeriesPaint( 1 , Color.MAGENTA );
renderer1.setSeriesPaint( 2 , Color.orange );
renderer1.setBaseItemLabelsVisible(true);
XYLineAndShapeRenderer renderer2 = new XYLineAndShapeRenderer(true, false); //detection ****************
renderer2.setSeriesPaint( 0 , Color.BLUE);
renderer2.setSeriesPaint( 1 , Color.BLACK );
renderer2.setSeriesPaint( 2 , Color.CYAN );
renderer2.setBaseItemLabelsVisible(true);
plot.setRenderer(0,renderer1);
plot.setRenderer(1,renderer2);
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
DateAxis axis = (DateAxis) plot.getDomainAxis();
axis.setDateFormatOverride(new SimpleDateFormat("dd/MM/yyyy"));
return avg_chart;
}
我试过 XYLineAndShapeRenderer renderer2 = (XYLineAndShapeRenderer) plot.getRenderer(1) 但它给出了 null 异常。
当 tooltips
为 true
时,ChartFactory.createTimeSeriesChart()
为您添加 XYToolTipGenerator
到 renderer1
。您可能只需要将它与 renderer2
:
一起使用
renderer2.setBaseToolTipGenerator(renderer1.getBaseToolTipGenerator());
或者你可以添加一个新的到renderer2
:
XYToolTipGenerator toolTipGenerator2 = StandardXYToolTipGenerator.getTimeSeriesInstance();
renderer2.setBaseToolTipGenerator(toolTipGenerator2);
JFreeChart avg_chart = ChartFactory.createTimeSeriesChart(
"Average detections and localizations" ,
"" ,
"" ,
null ,
true , true , false);
avg_chart.setBackgroundPaint(Color.WHITE);
final XYPlot plot = avg_chart.getXYPlot( );
plot.setDataset(0,this.dataset_local);
plot.setDataset(1,this.dataset_detect);
plot.setRangeAxis(0,new NumberAxis("Localizations"));
plot.setRangeAxis(1,new NumberAxis("Detections"));
plot.mapDatasetToRangeAxis(0, 0);
plot.mapDatasetToRangeAxis(1, 1);
plot.setDomainCrosshairVisible(true);
plot.setRangeCrosshairVisible(true);
XYLineAndShapeRenderer renderer1 = (XYLineAndShapeRenderer) plot.getRenderer(0);//localization
renderer1.setSeriesPaint( 0 , Color.RED );
renderer1.setSeriesPaint( 1 , Color.MAGENTA );
renderer1.setSeriesPaint( 2 , Color.orange );
renderer1.setBaseItemLabelsVisible(true);
XYLineAndShapeRenderer renderer2 = new XYLineAndShapeRenderer(true, false); //detection ****************
renderer2.setSeriesPaint( 0 , Color.BLUE);
renderer2.setSeriesPaint( 1 , Color.BLACK );
renderer2.setSeriesPaint( 2 , Color.CYAN );
renderer2.setBaseItemLabelsVisible(true);
plot.setRenderer(0,renderer1);
plot.setRenderer(1,renderer2);
plot.setBackgroundPaint(Color.lightGray);
plot.setDomainGridlinePaint(Color.white);
plot.setRangeGridlinePaint(Color.white);
DateAxis axis = (DateAxis) plot.getDomainAxis();
axis.setDateFormatOverride(new SimpleDateFormat("dd/MM/yyyy"));
return avg_chart;
}
我试过 XYLineAndShapeRenderer renderer2 = (XYLineAndShapeRenderer) plot.getRenderer(1) 但它给出了 null 异常。
tooltips
为 true
时,ChartFactory.createTimeSeriesChart()
为您添加 XYToolTipGenerator
到 renderer1
。您可能只需要将它与 renderer2
:
renderer2.setBaseToolTipGenerator(renderer1.getBaseToolTipGenerator());
或者你可以添加一个新的到renderer2
:
XYToolTipGenerator toolTipGenerator2 = StandardXYToolTipGenerator.getTimeSeriesInstance();
renderer2.setBaseToolTipGenerator(toolTipGenerator2);