jfreechart - 更改图例中的颜色样本

时间:2011-09-05 10:42:23

标签: java jfreechart legend

有人可以告诉我如何在jfreechart中更改图例中的系列颜色样本。我现在拥有的是系列颜色的小线,例如:Example我希望有这些颜色的方形样本。以下是一个示例
Example

有人可以帮助我吗?

好的,我找到了解决方案。至少我认为。当然,没有简单的方法可以做到这一点。现在,你知道,setShape(square)方法可以解决这个问题,至少我还没找到。

基本上,XY图表和时间表默认情况下具有“线型”图例,与条形图相反(例如,默认情况下为方形图例)。所以我不得不删除当前的图例并创建一个带有方形颜色样本的新图例,这个新图例会添加到我的时间图表中。

LegendItemCollection legend = new LegendItemCollection();    
for (int i = 0; i < seriecCount; ++i) {
    chart.getXYPlot().getRenderer().setSeriesPaint(i, colorPalette.get(i));
    LegendItem li = new LegendItem(data.getSeriesName(i), "-", null, null, Plot.DEFAULT_LEGEND_ITEM_BOX, colorPalette.get(i));
    legend.add(li);
}  
chart.getXYPlot().setFixedLegendItems(legend);

感谢您的关注。我希望它会帮助别人。

2 个答案:

答案 0 :(得分:3)

如上所述,生成自己的图例是在JFreeChart中完成工作的完全可接受的方式。如果您不想这样做,您还可以通过覆盖lookupLegendShape()方法来定义自己的渲染器。

thePlot.setRenderer(new XYLineAndShapeRenderer()
      {
         public Shape lookupLegendShape(int series)
         {
            return new Rectangle(15, 15);
         }
      });

答案 1 :(得分:0)

如果您使用XYBarRenderer Class XYBarRenderer

(子类:ClusteredXYBarRenderer,StackedXYBarRenderer)

您可以使用XYBarRenderer.setLegendBar(java.awt.Shape bar);
See: Javadoc
得到漂亮的广场。

示例:

JFreeChart chart = ChartFactory.createXYBarChart(/*...*/);

XYPlot plot = (XYPlot) chart.getPlot();

ClusteredXYBarRenderer renderer = new ClusteredXYBarRenderer();
renderer.setLegendBar(new Rectangle(17, 17));

plot.setRenderer(renderer);