JFreeChart图例显示 [英] JFreeChart Legend Display

查看:277
本文介绍了JFreeChart图例显示的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

In my JFreeChart timeseries plots I find the legends lines to thin to see the colour accurately. Another post [ jfreechart - change sample of colors in legend ] suggested overriding a renderer method as follows:

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

这种方法可行,直到你做我做的事情

this approach works fine until you do what I did

renderer.setSeriesShapesVisible(i, false);

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

Once I did that the legend reverts back to a line. Is there any way round this?

我采用的解决方案接近TrashGod建议的解决方案我覆盖了getLegendItem()方法,迫使图例形状到所需的框。

The solution I adopted is close to that suggested by TrashGod I overrode the getLegendItem() method, forcing the legend shape to the desired box.

    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 ,而不是渲染器创建的那个。

You're going to have to override getLegendItem() to get the LegendItem you want in place of the one the renderer creates.

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

Addendum: Here's a simple example that should help you get started.

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;
    }
}

这篇关于JFreeChart图例显示的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆