JFreechart繪制2D散點圖


JFreechart繪制2D散點圖

覺得有用的話,歡迎一起討論相互學習~


我的微博我的github我的B站

  • JFreechart是一款使用java進行數據繪圖的jar包,功能十分強大,具體有多強大可以參考多年前的博文JFreechart從入門到放棄
  • 經過這么多年,現在我又要用java進行算法設計了,經過多方挑選我還是選擇了我最熟悉的jfreechart.
  • 如果你還不知道JFreechart的基本代碼以及使用方式這里可以找到常用的demo示例
  • 下面介紹一下使用jfreechart繪制散點圖的方法
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.data.xy.DefaultXYDataset;

import javax.swing.*;
import java.awt.*;

public class test2Dplot {
    double[][] a = {{1, 2, 3}, {4, 5, 6}};

    void plot_2D(double[][] data, String name, String title) {
        DefaultXYDataset xydataset = new DefaultXYDataset();
        xydataset.addSeries(title, data);//設置點的圖標title一般表示這畫的是決策變量還是目標函數值
        JFreeChart chart = ChartFactory.createScatterPlot(name, "X", "Y", xydataset,
                PlotOrientation.VERTICAL, true, true, false);//設置表頭,x軸,y軸,name表示問題的類型

        ChartFrame frame = new ChartFrame("2D scatter plot", chart, true);
        XYPlot xyplot = (XYPlot) chart.getPlot();
        xyplot.setBackgroundPaint(Color.white);//設置背景面板顏色
        ValueAxis vaaxis = xyplot.getDomainAxis();
        vaaxis.setAxisLineStroke(new BasicStroke(1.5f));//設置坐標軸粗細


        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);


    }


    public static void main(String arg[]) {
        test2Dplot test2dplot_ = new test2Dplot();
        test2dplot_.plot_2D(test2dplot_.a, "nils1", "2ddcv");
    }
}

  • 從代碼中可以看出,Jfreechart需要有幾個要素,
  1. 首先要新建一個Dataset
  2. xydataset.addSeries(title, data); 設置數據和標題,其中數據data是一個2*N的二維數組,N表示數據點的數量。
  3. 通過ChartFactory.createScatterPlot設置一個表格形式
  4. 新建一個frame用於畫圖
  5. XYPlot xyplot = (XYPlot) chart.getPlot(); 然后通過這個xyplot設置圖像的各種屬性,比如線條顏色,粗細,坐標軸,等等
  6. 最后是一系列套話-這是從awt和swing中繼承的,不多說
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
  • 然后看看效果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM