问题描述
您将不得不重写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());
}
};