JFreeChart图例显示

问题描述

您将不得不重写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;
    }
}

解决方法

在我的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提出的解决方案, 我覆盖了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());
        }
    };

猜你在找的技术问答相关文章

如何检查配对的蓝牙设备是打印机还是扫描仪(Android)
是否允许实体正文进行HTTP DELETE请求?
如何将ZipInputStream转换为InputStream?
java.util.logging Java 8中的变量
PowerMockito.doReturn返回null
Java中的RESTful调用
Swing / Java:如何正确使用getText和setText字符串
特殊字符和重音字符
Android Studio中的ndk.dir错误
错误“找不到主类”