【问题标题】:jFreeChart: How to hide items from legend?jFreeChart:如何从图例中隐藏项目?
【发布时间】:2010-07-27 09:52:36
【问题描述】:

我需要从图例中隐藏每第二/第三/第四项。有没有办法在 jFreeChart 中实现这一点? 谢谢!

【问题讨论】:

    标签: jfreechart


    【解决方案1】:

    我已经尝试了上述建议,但它似乎对我不起作用。如果您只想从图例中删除系列,您可以使用 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);
            }
        }
    

    seriesList 是我创建的 seriesData pojo 的列表,其中包含用于创建图形的所有图形数据。如果seriesData 对象的键值为null= "",则该系列将在图例中不可见。

    【讨论】:

      【解决方案2】:

      好的,我自己做的。这样我就从图例中删除了每隔一个项目。 请离开cmets!

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

      【讨论】:

      • 这对于动态解决方案很有用。也可以使用 renderer.getLegendItems() 和 plot.setFixedLegendItems()。这产生了一个更简单的解决方案,但只有在您设置固定图例后您的图例不会改变时才有效。我没有时间制作解决方案的细节,但在 AbstractXYItemRenderer 和 XYPlot 中查找 getLegendItems 和 setFixedLegendItems。
      猜你喜欢
      • 2011-08-12
      • 2017-05-01
      • 2012-04-15
      • 2021-10-08
      • 2011-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多