JFreeChart图例显示

在我的JFreeChart时间序列图中,我发现图形线很细,可以准确地看到颜色。 另一篇文章[ jfreechart – 更改图例中的颜色样本 ]建议覆盖渲染器方法,如下所示:

renderer = new XYLineAndShapeRenderer() { private static final long serialVersionUID = 1L; public Shape lookupLegendShape(int series) { return new Rectangle(15, 15); } }; 

这种方法很好,直到你做我做的事情

 renderer.setSeriesShapesVisible(i, false); 

一旦我这样做,传说就会恢复到一条线。 这有什么办法吗?

我采用的解决方案接近于TrashGod I 建议的覆盖getLegendItem()方法,将图例形状强制转换为所需的框。

  renderer = new XYLineAndShapeRenderer() { private static final long serialVersionUID = 1L; public LegendItem getLegendItem(int datasetIndex, int series) { LegendItem legend = super.getLegendItem(datasetIndex, series); return new LegendItem(legend.getLabel(), legend.getDescription(), legend.getToolTipText(), legend.getURLText(), Plot.DEFAULT_LEGEND_ITEM_BOX, legend.getFillPaint()); } }; 

您将不得不重写getLegendItem()以获取所需的LegendItem ,而不是渲染器创建的LegendItem

附录:这是一个简单的例子,可以帮助您入门。

 XYPlot plot = (XYPlot) chart.getPlot(); plot.setRenderer(new MyRenderer()); ... private static class MyRenderer extends XYLineAndShapeRenderer { @Override public LegendItem getLegendItem(int dataset, int series) { LegendItem legendItem = super.getLegendItem(dataset, series); System.out.println(dataset + " " + series + " " + legendItem.getShape()); // modify legendItem here return legendItem; } } 

获取渲染器并执行以下操作:

 XYItemRenderer renderer = plot.getRenderer(); BasicStroke thickLine = new BasicStroke( 4.0f ); renderer.setSeriesStroke(0, thickLine); 

这会使你的线条变粗。