2

我想在 Jfreechart 中隐藏图例中的项目,并且我已经尝试过此代码 jFreeChart:如何从图例中隐藏项目?

它有效,但发生了一些奇怪的事情:图例项目的颜色不再与正确的数据匹配。换句话说,在图表中,例如,一条数据以黄色显示,但该项目对应的图例以另一种颜色显示。事实上,传说中的颜色已经混合了。

此外,当我尝试同时显示新旧图例时,没有颜色问题,但是当我使旧图例不可见时,就会出现混色问题。显然,我不想显示旧的传说。

工作代码 =>

LegendItemCollection legendItemsOld = localCombinedDomainXYPlot.getLegendItems();
final LegendItemCollection legendItemsNew = new LegendItemCollection();

for(int i = 0; i<4; i++){
    legendItemsNew.add(legendItemsOld.get(i));
}
LegendItemSource source = new LegendItemSource() {
    LegendItemCollection lic = new LegendItemCollection();
    {lic.addAll(legendItemsNew);}
    public LegendItemCollection getLegendItems() {  
        return lic;
    }
};
localJFreeChart.addLegend(new LegendTitle(source));

ChartUtilities.applyCurrentTheme(localJFreeChart);
localJFreeChart.getLegend().setVisible(true); ///////////////////

不工作的代码=>

LegendItemCollection legendItemsOld = localCombinedDomainXYPlot.getLegendItems();
final LegendItemCollection legendItemsNew = new LegendItemCollection();

for(int i = 0; i<4; i++){
    legendItemsNew.add(legendItemsOld.get(i));
}
LegendItemSource source = new LegendItemSource() {
    LegendItemCollection lic = new LegendItemCollection();
    {lic.addAll(legendItemsNew);}
    public LegendItemCollection getLegendItems() {  
        return lic;
    }
};
localJFreeChart.addLegend(new LegendTitle(source));

ChartUtilities.applyCurrentTheme(localJFreeChart);
localJFreeChart.getLegend().setVisible(false); ///////////////////
4

1 回答 1

1

基于这个线程,您可以尝试添加一个null元素来替换不需要的图例项。另一种方法似乎可以省略不需要的项目,但我不确定你是否也在这样做。为了澄清,请考虑发布一个演示问题的sscce。其中一org.jfree.chart.demo类可能是合适的起点。

于 2011-04-26T15:45:14.863 回答