jar包:
jcommon-1.0.23.jar
jfreechart-1.0.19.jar
maven配置:
<dependency> <groupId>jfree</groupId> <artifactId>jfreechart</artifactId> <version>1.0.19</version> </dependency> <dependency> <groupId>jfree</groupId> <artifactId>jcommon</artifactId> <version>1.0.23</version> </dependency>
示例代碼:
package com.test; import java.awt.Color; import java.awt.Font; import java.io.File; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; import org.apache.log4j.Logger; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.StandardChartTheme; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.renderer.xy.StandardXYItemRenderer; import org.jfree.data.time.Minute; import org.jfree.data.time.TimeSeries; import org.jfree.data.time.TimeSeriesCollection; import org.jfree.data.xy.XYDataset; import org.jfree.ui.RectangleInsets; public class CreateChart { // 日志記錄 private static Logger logger = Logger.getLogger(CreateChart.class); // 備用顏色 private static final Color color1 = new Color(127, 127, 127); private static final Color color2 = new Color(136, 0, 21); private static final Color color3 = new Color(237, 28, 36); private static final Color color4 = new Color(255, 127, 39); private static final Color color5 = new Color(255, 242, 0); private static final Color color6 = new Color(34, 177, 76); /** * 圖片生成 */ public boolean createChart() { try { // 解決中文亂碼問題 -- begin StandardChartTheme standardChartTheme = new StandardChartTheme("CN");// 創建主題樣式 standardChartTheme.setExtraLargeFont(new Font("黑體", Font.BOLD, 20));// 設置標題字體 standardChartTheme.setRegularFont(new Font("黑體", Font.PLAIN, 15));// 設置圖例的字體 standardChartTheme.setLargeFont(new Font("黑體", Font.PLAIN, 15));// 設置(時間)軸向的字體 ChartFactory.setChartTheme(standardChartTheme);// 應用主題樣式 // 解決中文亂碼問題 -- end String title = "jfreeChart數據曲線圖";// 標題名稱 Map<String, XYDataset> map = createDataset(); // 生成需要格式的數據集 JFreeChart jfreechart = ChartFactory.createTimeSeriesChart( // 創建chart對象 title, // 圖標標題 null, // 橫軸標題 null, // 縱軸標題 null, // 數據集 true, // 是否顯示圖例標識 true, // 是否顯示toolTips false // 是否支持超鏈接 ); jfreechart.setBackgroundPaint(Color.white); // 設置畫布背景色 // 獲取繪圖區對象 XYPlot plot = (XYPlot) jfreechart.getPlot(); // 給繪圖區對象設置屬性 plot.setOrientation(PlotOrientation.VERTICAL); // 數據區的方向 plot.setBackgroundPaint(Color.lightGray); // 背景色 plot.setDomainGridlinePaint(Color.white); // 分類軸網格線條顏色 plot.setRangeGridlinePaint(Color.white); // 數據軸網格線條顏色 plot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D)); // 坐標軸到數據區的間距 plot.getRangeAxis().setFixedDimension(40D); // 坐標軸距左邊距離 // 設置軸1--數據匹配 NumberAxis axis0 = new NumberAxis("多軸-軸1"); axis0.setLabelFont(new Font("黑體", Font.PLAIN, 12));// y軸字體 plot.setRangeAxis(0, axis0); plot.setDataset(0, map.get("dataSet1")); plot.mapDatasetToRangeAxis(0, 0); // 設置軸2--數據匹配 NumberAxis axis1 = new NumberAxis("多軸-軸2"); axis1.setLabelFont(new Font("黑體", Font.PLAIN, 12));// y軸字體 plot.setRangeAxis(1, axis1); plot.setDataset(1, map.get("dataSet2")); plot.mapDatasetToRangeAxis(1, 1); // 設置軸3--數據匹配 NumberAxis axis2 = new NumberAxis("多軸-軸3"); axis2.setLabelFont(new Font("黑體", Font.PLAIN, 12));// y軸字體 plot.setRangeAxis(2, axis2); plot.setDataset(2, map.get("dataSet3")); plot.mapDatasetToRangeAxis(2, 2); // 坐標軸1--曲線顏色 StandardXYItemRenderer renderer0 = new StandardXYItemRenderer(); renderer0.setSeriesPaint(0, color1); renderer0.setLegendTextPaint(0, color1);// 設置對應圖例字體顏色 renderer0.setSeriesPaint(1, color2); renderer0.setLegendTextPaint(1, color2);// 設置對應圖例字體顏色 plot.setRenderer(0, renderer0); // 坐標軸2--曲線顏色 StandardXYItemRenderer renderer1 = new StandardXYItemRenderer(); renderer1.setSeriesPaint(0, color3); renderer1.setLegendTextPaint(0, color3);// 設置對應圖例字體顏色 renderer1.setSeriesPaint(1, color4); renderer1.setLegendTextPaint(1, color4);// 設置對應圖例字體顏色 plot.setRenderer(1, renderer1); // 坐標軸3--曲線顏色 StandardXYItemRenderer renderer2 = new StandardXYItemRenderer(); renderer2.setSeriesPaint(0, color5); renderer2.setLegendTextPaint(0, color5);// 設置對應圖例字體顏色 renderer2.setSeriesPaint(1, color6); renderer2.setLegendTextPaint(1, color6);// 設置對應圖例字體顏色 plot.setRenderer(2, renderer2); // 3. 保存chart圖標 String filePath = "D:\\Chart";// 圖片保存地址 String fileName = "testJFreeChart"; File fos_jpg = new File(filePath + "/" + fileName + ".jpg "); // 需要保存到的文件地址和名稱 if (!fos_jpg.getParentFile().exists()) { fos_jpg.getParentFile().mkdirs(); } ChartUtilities.saveChartAsJPEG( // fos_jpg, // 需要保存到的文件對象 jfreechart, // 統計圖表對象 1000, // 寬 600 // 高 ); logger.info("繪圖完成!"); } catch (Exception e) { logger.error(e); } return true; } @SuppressWarnings("deprecation") private Map<String, XYDataset> createDataset() { // 定義返回結果集 Map<String, XYDataset> map = new HashMap<String, XYDataset>(); // 軸1數據 TimeSeries axis0_data1 = new TimeSeries("axis0_data1", org.jfree.data.time.Minute.class); TimeSeries axis0_data2 = new TimeSeries("axis0_data2", org.jfree.data.time.Minute.class); // 軸2數據 TimeSeries axis1_data1 = new TimeSeries("axis1_data1", org.jfree.data.time.Minute.class); TimeSeries axis1_data2 = new TimeSeries("axis1_data2", org.jfree.data.time.Minute.class); // 軸3數據 TimeSeries axis2_data1 = new TimeSeries("axis2_data1", org.jfree.data.time.Minute.class); TimeSeries axis2_data2 = new TimeSeries("axis2_data2", org.jfree.data.time.Minute.class); for (int i = 0; i < 168; i++) { // 軸1數據 axis0_data1.add(new Minute(getDate(i)), Math.random() * 10 + 30); axis0_data2.add(new Minute(getDate(i)), Math.random() * 10 + 30); // 軸2數據 axis1_data1.add(new Minute(getDate(i)), Math.random() * 100 + 200); axis1_data2.add(new Minute(getDate(i)), Math.random() * 100 + 200); // 軸3數據 axis2_data1.add(new Minute(getDate(i)), Math.random() * 1000 + 1000); axis2_data2.add(new Minute(getDate(i)), Math.random() * 1000 + 1000); } TimeSeriesCollection dataSet1 = new TimeSeriesCollection(); TimeSeriesCollection dataSet2 = new TimeSeriesCollection(); TimeSeriesCollection dataSet3 = new TimeSeriesCollection(); // 軸1數據 dataSet1.addSeries(axis0_data1); // dataSet1.addSeries(axis0_data2); // 軸2數據 dataSet2.addSeries(axis1_data1); // dataSet2.addSeries(axis1_data2); // 軸3數據 dataSet3.addSeries(axis2_data1); // dataSet3.addSeries(axis2_data2); map.put("dataSet1", dataSet1); map.put("dataSet2", dataSet2); map.put("dataSet3", dataSet3); return map; } /** * 模擬時間 */ public Date getDate(int i) { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MINUTE, -i); return calendar.getTime(); } /** * test Main */ public static void main(String[] args) { new CreateChart().createChart(); } }