I am having trouble with the Legend items of XYPlot. By default the legend items (which I made into circles) have grey outline strokes. I need to remove those strokes and fill the circles with native color. I tried accessing legend items through shapeRenderer.getLegendItem(), but I failed to reach my goal.
Here is my code (sorry for huge import list, I use them in later parts of the code).
Code: Select all
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.geom.Ellipse2D;
import java.awt.Polygon;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.Legend;
import org.jfree.chart.StandardLegend;
import org.jfree.chart.annotations.XYShapeAnnotation;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.XYDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import java.awt.Color;
import org.jfree.data.Range;
import org.jfree.chart.annotations.XYTextAnnotation;
import org.jfree.chart.renderer.xy.*;
double xMax = chart.getXYPlot().getDomainAxis().getRange().getUpperBound();
double yMax = chart.getXYPlot().getRangeAxis().getRange().getUpperBound();
String[] cols = {"0x008542","0x019086","0x0190ee","0x0325A8","0x5506BA","0xAE07C5","0xD10994","0xE30D16","0xEF660F","0xF49B11"};
chart.getXYPlot().getDomainAxis().setRange(0.00,xMax);
XYShapeRenderer shapeRenderer = new XYShapeRenderer();
shapeRenderer.setBaseShape(new Ellipse2D.Double(1,1,7,7),false); //circles for data-points
shapeRenderer.setBaseLegendShape(new Ellipse2D.Double(1,1,7,7)); //circles for Legend
int datacount = chart.getPlot().getDataset().getSeriesCount();
int colidx;
Color tmp;
////////////////////////////
for (int i = 0; i < datacount; i++)
{
if(datacount <= cols.length) {
colidx = i * (int) (cols.length / datacount);
} else {
colidx = i % cols.length;
}
tmp = Color.decode(cols[colidx]);
shapeRenderer.setSeriesPaint(i, new Color(tmp.getRed(),tmp.getGreen(),tmp.getBlue(),160)); //last component is alpha-transparency (for overlapping points)
}
//LAST STEP!
chart.getXYPlot().setRenderer(shapeRenderer);
/* //dotRenderer
XYDotRenderer dotRenderer = new XYDotRenderer();
dotRenderer.setDotHeight(7);
dotRenderer.setDotWidth(7);
dotRenderer.setSeriesPaint(0, Color.red);
dotRenderer.setSeriesPaint(1, Color.green);
dotRenderer.setSeriesPaint(2, Color.orange);
dotRenderer.setSeriesPaint(3, Color.blue);
dotRenderer.setLegendShape(new Ellipse2D.Double(1,1,7,7));
chart.getXYPlot().setRenderer(dotRenderer); */