首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

JFreeChart 繪製折線圖完整示例(季度銷售趨勢)

     編輯:Java 相關知識

依賴

<dependency>
    <groupId>org.jfree</groupId>
    <artifactId>jfreechart</artifactId>
    <version>1.5.4</version>
</dependency>

完整代碼

package com.lei.jfreechart;

import org.jfree.chart.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import javax.swing.JPanel;

public class LineCharts extends ApplicationFrame {
    public LineCharts(String title) {
        super(title);
        setContentPane(createDemoPanel());
    }

    public static void main(String[] args) {
        LineCharts chart = new LineCharts("一季度銷售折線圖");
        chart.pack();
        RefineryUtilities.centerFrameOnScreen(chart);
        chart.setVisible(true);
    }

    private static JPanel createDemoPanel() {
        JFreeChart chart = createChart(createDataset());
        return new ChartPanel(chart);
    }

    private static JFreeChart createChart(DefaultCategoryDataset dataset) {
        JFreeChart chart = ChartFactory.createLineChart(
            "一季度銷售曲線", "月份", "銷售額(百萬)", dataset,
            PlotOrientation.VERTICAL, true, true, false);

        CategoryPlot plot = chart.getCategoryPlot();
        plot.setRangeGridlinesVisible(true);
        plot.setBackgroundAlpha(0.3f);

        NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
        rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
        rangeAxis.setAutoRangeIncludesZero(true);
        rangeAxis.setUpperMargin(0.20);
        rangeAxis.setLabelAngle(Math.PI / 2.0);
        return chart;
    }

    private static DefaultCategoryDataset createDataset() {
        DefaultCategoryDataset ds = new DefaultCategoryDataset();
        String[] series = {"冰箱", "彩電", "洗衣機"};
        String[] months = {"1月", "2月", "3月"};
        double[][] data = {
            {0.0, 4.2, 3.9},
            {1.0, 5.2, 7.9},
            {2.0, 9.2, 8.9}
        };
        for (int i = 0; i < series.length; i++) {
            for (int j = 0; j < months.length; j++) {
                ds.addValue(data[i][j], series[i], months[j]);
            }
        }
        return ds;
    }
}

運行效果

彈出 Swing 窗口,顯示三條折線(冰箱/彩電/洗衣機)隨月份變化的銷售趨勢圖,帶圖例、網格、工具提示。

常用自定義

  • 顏色/形狀:LineAndShapeRenderer 設置 setSeriesPaint、setSeriesShape。
  • 數據標籤:renderer.setDefaultItemLabelGenerator(new StandardCategoryItemLabelGenerator()) + setDefaultItemLabelsVisible(true)。
  • 導出圖片:ChartUtils.saveChartAsPNG(new File("line.png"), chart, 800, 600)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved