7

在我的 JFreeChart 时间序列图中,我发现图例线太细而无法准确看到颜色。另一篇文章 [ https://stackoverflow.com/questions/7306901/jfreechart-change-sample-of-colors-in-legend ] 建议覆盖渲染器方法,如下所示:

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

这种方法工作正常,直到你做我所做的

renderer.setSeriesShapesVisible(i, false);

一旦我这样做了,传说就会恢复到一条线。有没有办法解决这个问题?

我采用的解决方案接近 TrashGod 建议的解决方案, 我覆盖了 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());
        }
    };
4

2 回答 2

8

您将不得不重写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;
    }
}
于 2012-08-31T21:42:06.003 回答
2

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

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

这将使你的线条更粗。

于 2012-08-31T21:35:06.227 回答