I have array of elements and they belong to one Series,with these elements I calculated Centroids. Problem is when I display them with “ScatterPlot” I need to show “Array Elements” with “One Color” and the Centroid of these points in “Different Color”.
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Shape;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.DefaultDrawingSupplier;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYItemRenderer;
import org.jfree.data.xy.DefaultXYDataset;
import org.jfree.data.xy.XYDataset;
public class Scatteradd extends JFrame {
int i, x = 0, n1 = 0;
public Scatteradd(String title, final double[][] samples) {
super(title);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final DefaultXYDataset dataset = new DefaultXYDataset();
dataset.addSeries("Series0", createSeries(0, samples));
//dataset.addSeries("Series1", createSeries(1,trainingset3));
JFreeChart chart = createChart(dataset);
ChartPanel chartPanel = new ChartPanel(chart, false);
chartPanel.setPreferredSize(new Dimension(640, 480));
this.add(chartPanel, BorderLayout.CENTER);
JPanel buttonPanel = new JPanel();
JButton addButton = new JButton("Add Series");
buttonPanel.add(addButton);
addButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int n = dataset.getSeriesCount();
System.out.println("N-SIZE" + n);
dataset.addSeries("Series" + n, createSeries(n, samples));
System.exit(1);
}
});
JButton remButton = new JButton("Remove Series");
buttonPanel.add(remButton);
remButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
int n = dataset.getSeriesCount() - 1;
dataset.removeSeries("Series" + n);
}
});
this.add(buttonPanel, BorderLayout.SOUTH);
}
/**
* Create a series
* @param samples
*
* @ return the series
*/
private double[][] createSeries(int mean, double[][] samples) {
double[][] series = new double[2][samples.length + 1];
System.out.println("SSSKSKSValue" + series.length);
double p = 0, q = 0;
for (i = 0; i < samples.length; i++) {
series[0][i] = samples[i][0];
p = p + samples[i][0];
series[1][i] = samples[i][1];
q = q + samples[i][1];
//System.out.println("Series Values"+series[0][i]+","+series[1][i]);
}
series[0][samples.length] = p / samples.length;//Centroid Calculation
series[1][samples.length] = q / samples.length;//Centroid Calculation
//Printing All Points in Series Array and the Last Row is the Centroid Values
//which I want display in different Color on Scatter Plot
for (int v = 0; v < series[0].length; v++) {
System.out.println("Series Values" + series[0][v] + "," + series[1][v]);
}
return series;
}
private JFreeChart createChart(XYDataset dataset) {
// create the chart...
JFreeChart chart = ChartFactory.createScatterPlot(
"Scatter Plot Demo", "X", "Y", dataset,
PlotOrientation.VERTICAL, true, true, false);
// set chart background
chart.setBackgroundPaint(Color.white);
// set a few custom plot features
XYPlot plot = (XYPlot) chart.getPlot();
Shape[] cross = DefaultDrawingSupplier.createStandardSeriesShapes();
plot.setBackgroundPaint(new Color(0xffffe0));
plot.setDomainGridlinesVisible(true);
plot.setDomainGridlinePaint(Color.lightGray);
plot.setRangeGridlinePaint(Color.lightGray);
XYItemRenderer renderer = (XYItemRenderer) plot.getRenderer();
renderer.setSeriesShape(0, cross[0]);
plot.setRenderer(renderer);
return chart;
}
/** Main method **/
public static void main(String[] args) {
double[][] trainingset3 = {
{0.428053, 0.409742,},
{0.415487, 0.401414,},
{0.404834, 0.400493,},};
Scatteradd demo = new Scatteradd("JFreeChartDemo", trainingset3);
demo.pack();
demo.setLocationRelativeTo(null);
demo.setVisible(true);
}
}
SSSKSKSValue2 Series Values0.428053,0.409742 Series Values0.415487,0.401414 Series Values0.404834,0.400493 Series Values0.4161246666666667,0.403883 //Centroids of above 3 Rows
Is there any method to show particular row in a series with different Color,Any example provided regarding this would be great and helpful.
Thanks
You can override
getItemPaintin the scatter plot’sXYLineAndShapeRendererand choose your color based on any desired combination ofrowandcol. There’s a related example here, although it’s for a different renderer.Addendum: The general idea appears in
MyRenderer, whichextends XYLineAndShapeRenderer.