You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 21:54:51