FastScatterPlot无法显示数据问题排查与解决求助
问题:JFreeChart散点图无数据显示
我正在为大学项目开发图表应用,使用JFreeChart构建图表、Swing搭建UI。经调试确认,文件解析器已能正确读取数据,图表及承载它的面板可正常显示,但图表中无数据。
原ScatterPlot类代码
import org.jfree.chart.ChartPanel; import org.jfree.chart.ChartUtils; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.FastScatterPlot; public class ScatterPlot extends Chart{ public ScatterPlot(String title, float[][] data) { this.data = data; //CSVParser.printArrayToConsole(this.data[1]); NumberAxis domainAxis = new NumberAxis("X"); domainAxis.setAutoRangeIncludesZero(false); NumberAxis rangeAxis = new NumberAxis("Y"); rangeAxis.setAutoRangeIncludesZero(true); FastScatterPlot plot = new FastScatterPlot(this.data, domainAxis, rangeAxis); JFreeChart chart = new JFreeChart("Fast Scatter Plot", plot); ChartUtils.applyCurrentTheme(chart); panel = new ChartPanel(chart); panel.setPreferredSize(new java.awt.Dimension(500, 270)); panel.setMinimumDrawHeight(10); panel.setMaximumDrawHeight(2000); panel.setMinimumDrawWidth(20); panel.setMaximumDrawWidth(2000); } }
父类Chart代码
import org.jfree.chart.ChartPanel; import javax.swing.JPanel; import org.jfree.chart.plot.FastScatterPlot; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.JFreeChart; public class Chart { float[][] data; ChartPanel panel; public Chart(){ initChartPanel(); } private void initChartPanel(){ float[][] tempData = {{0}, {0}}; FastScatterPlot plot = new FastScatterPlot(tempData, new NumberAxis(""), new NumberAxis("")); JFreeChart chart = new JFreeChart("If you're seeing this, something went wrong.", plot); panel = new ChartPanel(chart); } }
使用的CSV数据集
0,1,2,3,4,5,6,7,8,9,10,11 4.2,4,3.7,3.4,3.2,2.9,2.6,2.4,2.1,1.8,1.5,1.2
运行后显示无数据的散点图。
已尝试的解决方法
- 手动设置轴范围
- 禁用自动范围
- 添加缩放功能排查点是否过小(无效)
- 使用他人编写的FastScatterPlot扩展类调整点大小
注:ScatterPlot类由队友复制教程代码而来,我与队友均不熟悉JFreeChart,无法获得相关帮助。已提供完整可复现问题的代码路径。
最终解决方法
改用XYDataset和ChartFactory.createScatterPlot()方法解决了问题,修改后的ScatterPlot类代码如下:
import org.jfree.chart.JFreeChart; import org.jfree.chart.ChartFactory; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; public class ScatterPlot extends Chart{ public ScatterPlot(String[] labels, float[][] data) { super(labels, data); XYDataset dataset = createDataset(); JFreeChart chart = ChartFactory.createScatterPlot( labels[0], labels[1], labels[2], dataset ); setChartPanel(chart); } private XYDataset createDataset() { XYSeriesCollection dataset = new XYSeriesCollection(); XYSeries series = new XYSeries("Series 1"); for(int i = 0; i < data[0].length; ++i){ series.add(data[0][i], data[1][i]); } dataset.addSeries(series); return dataset; } }
内容的提问来源于stack exchange,提问作者Santiago-Garciayala
相关产品推荐
相关产品推荐

