jFreeChart:如何隐藏图例中的项目?

tzi*_*ppy 7 jfreechart

我需要隐藏图例中的每个第二/第三/第四项.有没有办法在jFreeChart中实现这一目标?谢谢!

小智 9

我已经尝试了上述建议,但似乎对我没有用.如果您只想从图例中删除系列,则可以使用该setSeriesVisibleInLegend()方法执行此操作.我的情况是我的一些系列没有传奇键.如果它们没有图例键,则图例不应在图例中可见.我用以下代码实现了这个:

    for(int i = 0; i < seriesList.size(); i++){

        if(seriesList.get(i).getKey() == null || seriesList.get(i).getKey().equals("")){
            graph.getXYPlot().getRenderer().setSeriesVisibleInLegend(i, Boolean.FALSE);
        }
    }
Run Code Online (Sandbox Code Playgroud)

seriesListseriesData我创建的pojo 列表,其中包含所有图形数据以创建图形.如果seriesData对象的键值是,null或者= ""图例中的系列将不可见.


tzi*_*ppy 4

好吧,我自己刚刚做的。这样我就从图例中删除了每隔一个的项目。请留下评论!

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

for(int i = 0; i< legendItemsOld.getItemCount(); i++){
  if(!(i%2 == 0)){
    legendItemsNew.add(legendItemsOld.get(i));
  }
}
LegendItemSource source = new LegendItemSource() {
LegendItemCollection lic = new LegendItemCollection();
{lic.addAll(legendItemsNew);}
public LegendItemCollection getLegendItems() {  
    return lic;
}
};
chart.addLegend(new LegendTitle(source));
Run Code Online (Sandbox Code Playgroud)

  • 这对于动态解决方案很有好处。也可以使用 renderer.getLegendItems() 和plot.setFixedLegendItems()。这会产生一个更简单的解决方案,但只有在设置固定图例后图例不会更改时才有效。我没有时间详细设计解决方案,但在 AbstractXYItemRenderer 和 XYPlot 中查找 getLegendItems 和 setFixedLegendItems。 (2认同)