在我的JFreeChart时间序列图中,我发现图形线变薄以准确地看到颜色。另一篇文章[jfreechart - change sample of colors in legend] 建议覆盖渲染器方法如下:
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());
}
};
答案 0 :(得分:6)
您将不得不覆盖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;
}
}
答案 1 :(得分:2)
获取渲染器并执行以下操作:
XYItemRenderer renderer = plot.getRenderer();
BasicStroke thickLine = new BasicStroke( 4.0f );
renderer.setSeriesStroke(0, thickLine);
这会使你的线条变粗。