JFreeChart Legend Display

In my JFreeChart graphic entries, I find that the lines of the legends are thin in order to accurately see the color. Another post [ jfreechart - change the color swatch in the legend ] suggested overriding the rendering method as follows:

renderer = new XYLineAndShapeRenderer() { private static final long serialVersionUID = 1L; public Shape lookupLegendShape(int series) { return new Rectangle(15, 15); } }; 

this approach works fine until you do what i did

 renderer.setSeriesShapesVisible(i, false); 

Once I have done this, the legend will return to the line. Is there any way around this?

The decision I made is close to the solution proposed by TrashGod . I tried the getLegendItem () method, forcing the legend form in the desired field.

  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()); } }; 
+4
source share
2 answers

You will have to override getLegendItem() to get the LegendItem instead of the one that creates the render.

Appendix: Here is a simple example that should help you get started.

 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; } } 
+4
source

Get the renderer and do the following:

 XYItemRenderer renderer = plot.getRenderer(); BasicStroke thickLine = new BasicStroke( 4.0f ); renderer.setSeriesStroke(0, thickLine); 

This will make your line thicker.

+2
source

All Articles