java 畫數學函數圖不太方便,需要用第三方包 jfree,安裝或下載方法網上有。
要用到 jfree 裡面的 XYSeries,產生一系列資料。
然後根據產生的資料,使用 chart 描點畫圖。
舉例: 1. 畫圖 y= x^2
import javax.swing.JFrame;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartFrame;import org.jfree.chart.JFreeChart;import org.jfree.chart.plot.PlotOrientation;import org.jfree.data.xy.XYSeries;import org.jfree.data.xy.XYSeriesCollection;public class DrawMath {public static void main(String[] args) {XYSeries series = new XYSeries("xySeries");for (int x = -100; x < 100; x++) {int y = x*x;series.add(x, y);}XYSeriesCollection dataset = new XYSeriesCollection();dataset.addSeries(series);JFreeChart chart = ChartFactory.createXYLineChart("y = x^2", // chart title"x", // x axis label"x^2", // y axis labeldataset, // dataPlotOrientation.VERTICAL,false, // include legendfalse, // tooltipsfalse // urls);ChartFrame frame = new ChartFrame("my picture", chart);frame.pack();frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}
顯示效果:
2. 畫圖 y= sin(x)
import javax.swing.JFrame;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartFrame;import org.jfree.chart.JFreeChart;import org.jfree.chart.plot.PlotOrientation;import org.jfree.data.xy.XYSeries;import org.jfree.data.xy.XYSeriesCollection;public class DrawMath {public static void main(String[] args) {XYSeries series = new XYSeries("xySeries");for (double x = -10; x < 10; x = x + 0.1) {double y = Math.sin(x);series.add(x, y);}XYSeriesCollection dataset = new XYSeriesCollection();dataset.addSeries(series);JFreeChart chart = ChartFactory.createXYLineChart("y = sin(x)", // chart title"x", // x axis label"sin(x)", // y axis labeldataset, // dataPlotOrientation.VERTICAL,false, // include legendfalse, // tooltipsfalse // urls);ChartFrame frame = new ChartFrame("my picture", chart);frame.pack();frame.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}
顯示效果:
3. 畫散佈圖
畫散佈圖時,要用到 plot 與 render 進一步設定了。
舉例:
import javax.swing.JFrame;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartFrame;import org.jfree.chart.JFreeChart;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.plot.XYPlot;import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;import org.jfree.data.xy.XYSeries;import org.jfree.data.xy.XYSeriesCollection;public class DrawMath {public static void main(String[] args) {XYSeries series = new XYSeries("xySeries");for (double x = -10; x < 10; x = x + 0.1) {double y = Math.sin(x);series.add(x, y);}XYSeriesCollection dataset = new XYSeriesCollection();dataset.addSeries(series);JFreeChart chart = ChartFactory.createXYLineChart("y = sin(x)", // chart title"x", // x axis label"sin(x)", // y axis labeldataset, // dataPlotOrientation.VERTICAL,false, // include legendfalse, // tooltipsfalse // urls);XYPlot plot = (XYPlot)chart.getPlot();XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer();renderer.setSeriesLinesVisible(0, false); // 設定連線不可見 plot.setRenderer(renderer);ChartFrame frame = new ChartFrame("my picture", chart);frame.pack(); // fit window to figure sizeframe.setVisible(true);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}}
顯示效果: