Orson Chart在Swing中绘制三维曲线

避雷选用 Matplot3D for JAVA,我引入jar包乱码,且不开源

避雷 jyz3d 高版本代码不兼容低版本的实例,高版本的教程需要另外收费

最终选择了使用Orson Charts, 一个用于 Java 平台的 3D 图表库,它支持多种类型的 3D 图表,包括线图、散点图、曲面图等。

(可用于JavaFX, Swing 和服务器端应用),下载地址:

http://www.object-refinery.com/orsoncharts/index.html

maven下载地址: https://mvnrepository.com/artifact/com.object-refinery/orsoncharts/1.7

这是1.7版本的,可以点击下载jar包进行导入项目,

读取本地test.txt文件中的三维数据,绘制三维曲线图: 

public class OutBalsDisplayPanel extends javax.swing.JPanel {

    private Chart3D chart3D;
    private Chart3DPanel chartPanel;
    private XYZSeriesCollection dataset;

    public OutBalsDisplayPanel() {
        initComponents();
        readData(); 
        createChartPanel();
    }

    private void createChartPanel() {

        // 创建图表
        chart3D = Chart3DFactory.createXYZLineChart(
                "", //大标题
                "", //子标题
                dataset,
                "xAxis",
                "yAxis",
                "zAxis"
        );

        chartPanel = new Chart3DPanel(chart3D);
        chartPanel.setPreferredSize(new Dimension(842, 499));
        jSplitPane1.setLeftComponent(chartOutPanel);
        jSplitPane1.setRightComponent(jScrollPane1);

        chartOutPanel.add(chartPanel, BorderLayout.CENTER);
        chartOutPanel.revalidate();
        chartOutPanel.repaint();

        jSplitPane1.revalidate();
        jSplitPane1.repaint();

    }

    private void readData() {
        dataset = new XYZSeriesCollection();
        try (BufferedReader br = new BufferedReader(new FileReader("test.txt"))) {
            br.readLine(); // 跳过标题行
            String line;
            List<Double> xSeries = new ArrayList<>();
            List<Double> ySeries = new ArrayList<>();
            List<Double> zSeries = new ArrayList<>();
            while ((line = br.readLine()) != null) {
                String[] values = line.split("\\s+");
                double x = Double.parseDouble(values[0]);
                double y = Double.parseDouble(values[1]);
                double z = Double.parseDouble(values[2]);
                xSeries.add(x);
                ySeries.add(y);
                zSeries.add(z);
            }
            // 添加系列
            XYZSeries series = new XYZSeries("Series 1");
            for (int i = 0; i < xSeries.size(); i++) {
                double x = xSeries.get(i);
                double y = ySeries.get(i);
                double z = zSeries.get(i);
                XYZDataItem dataItem = new XYZDataItem(x, y, z);
                series.add(dataItem);
            }
            dataset.add(series);
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

效果图如下:

可以旋转、缩放,但是本身不支持动画效果,需自己编写代码来逐步更新数据,并在每次更新后重新绘制图表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值