Java折線圖簡單繪制


  先不搞復雜的,就來一個最簡單的功能吧!

  所需實現的功能:給出一個數組,以自然數序列為橫坐標,數組元素值為縱坐標,畫出其折線圖。

  注意:只是折線圖,不添加其他坐標軸標簽和標題、網格等等。其實只是畫折線罷了

 

  了解Swing編程的都知道,應該是畫在JPanel里面了,那么圖形繪制功能由awt包的Graphics類提供,繪制函數需要JFrame對象去重寫函數public void paint(Graphics g)

 

  有了以上的鋪墊,就很容易寫出了。主函數來生成一個隨機的序列,進行繪制測試

package plotUtils;

import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;

import javax.swing.JFrame;

public class ResultPlot extends JFrame{

    
    private double[] y;
    private int figureHeight = 600;

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    public ResultPlot(double[] y){
        super();
        this.y = y;

        setTitle("Line Draw");
        setBounds(2, 100, 1500, figureHeight);
        setVisible(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }

    @Override
    public void paint(Graphics g) {
        g.setColor(Color.red);
        int biasX = 15;
        int h = 2;
        int biasY = 100;
        g.drawLine(biasX, this.figureHeight-biasY, biasX+h*(y.length), this.figureHeight-biasY);
        g.drawLine(biasX,figureHeight-((int)y[0]+biasY), biasX+h, figureHeight-((int)y[1]+biasY));
        int x1,y1, x2, y2;
        for (int i = 1; i < y.length-1; i++) {
            x1 = biasX+h*i; y1 = figureHeight-((int)y[i]+biasY);
            x2=biasX+h*(i+1); y2=figureHeight-((int)y[i+1]+biasY);
            g.drawLine(x1, y1, x2, y2);
        }
        g.drawString("("+h*(y.length-1)+","+(int)y[y.length-1]+")", biasX+h*(y.length-1), this.figureHeight-((int)y[y.length-1]+biasY));
    }

    public static void main(String[] args) {
        double[] y = new double[700];
        Random rand = new Random();
        for (int i = 0; i < y.length; i++) {
            y[i] = rand.nextInt(200);
        }
        ResultPlot rp = new ResultPlot(y);
    }
}

  效果如下,畫了700個點,效果還是很令人滿意的,畢竟需要的功能已經實現了,不過還是繪制的過程挺花時間的。

  顯然,只要傳入一個數組,就可以畫出折線了,封裝的還是不錯的,就是功能不夠多,樣式不夠好看。日后再添


免責聲明!

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



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