JFreeChart Scatter Plot Lines
我正在尝试使用JFreeChart创建一个图形,但是它没有正确的线条。 它不是按我按顺序连接点,而是按照x值的顺序连接点。 我正在使用ChartFactory.createScatterPlot来创建绘图,使用XYLineAndShapeRenderer来设置可见的线条。
/ edit:sscce:
package test; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; import org.jfree.ui.ApplicationFrame; public class PlotTest { private XYSeriesCollection dataset; public static void main (String[] args) { new PlotTest(); } public PlotTest () { dataset = new XYSeriesCollection(); XYSeries data = new XYSeries("data"); data.add(3, 2); //Point 1 data.add(1, 1); //Point 2 data.add(4, 1); //Point 3 data.add(2, 2); //Point 4 dataset.addSeries(data); showGraph(); } private void showGraph() { final JFreeChart chart = createChart(dataset); final ChartPanel chartPanel = new ChartPanel(chart); chartPanel.setPreferredSize(new java.awt.Dimension(500, 270)); final ApplicationFrame frame = new ApplicationFrame("Title"); frame.setContentPane(chartPanel); frame.pack(); frame.setVisible(true); } private JFreeChart createChart(final XYDataset dataset) { final JFreeChart chart = ChartFactory.createScatterPlot( "Title", // chart title "X", // x axis label "Y", // y axis label dataset, // data PlotOrientation.VERTICAL, true, // include legend true, // tooltips false // urls ); XYPlot plot = (XYPlot) chart.getPlot(); XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(); renderer.setSeriesLinesVisible(0, true); plot.setRenderer(renderer); return chart; } }
现在我希望程序以1-2-3-4的顺序连接点,这是我将它们添加到我的数据集的顺序。 但是我按照2-4的顺序将它们连接起来,按x值排序。
尝试这个:
final XYSeries data = new XYSeries("data",false);
对XYSeries
使用此构造XYSeries
会禁用自动排序,如XYSeries API中所定义。
之前:
后:
没有sscce很难说,但你可能会尝试从你的XYDataset
实现中返回XYDataset
。 此外,它可能有助于知道应该给散点图中连接点的线赋予什么含义。