<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)。