JFreeChart图例显示

Ric*_*d B 5 java legend jfreechart

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

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

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

renderer.setSeriesShapesVisible(i, false);
Run Code Online (Sandbox Code Playgroud)

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

我采用的解决方案接近于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());
        }
    };
Run Code Online (Sandbox Code Playgroud)

tra*_*god 6

您将不得不覆盖getLegendItem()以获取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;
    }
}
Run Code Online (Sandbox Code Playgroud)