JFreeChart 之折線圖
阿新 • • 發佈:2017-12-28
har 統計報表 宋體 add 添加 gpo 下載地址 nta org
JFreeChart 之折線圖
一、JFreeChart 簡介
JFreeChart是JAVA平臺上的一個開放的圖表繪制類庫。它完全使用JAVA語言編寫,是為applications, applets, servlets 以及JSP等使用所設計。JFreeChart可生成餅圖(pie charts)、柱狀圖(bar charts)、散點圖(scatter plots)、時序圖(time series)、甘特圖(Gantt charts)等等多種圖表,並且可以產生PNG和JPEG格式的輸出,還可以與PDF和EXCEL關聯。
二、JFreeChart 的使用
官方網站:http://www.jfree.org/
下載地址:https://sourceforge.net/projects/jfreechart/files/1.%20JFreeChart/
1、拷貝相關的 Jar (jcommon-1.0.23.jar和jfreechart-1.0.19.jar)到 Java 項目中
2、折線圖示例(LineChart.java)
1 package cn.com.zfc.jfreechart; 2 3 import java.awt.Font; 4 import java.awt.Rectangle; 5 import java.io.File; 6 import java.io.IOException;7 8 import org.jfree.chart.ChartFactory; 9 import org.jfree.chart.ChartFrame; 10 import org.jfree.chart.ChartUtilities; 11 import org.jfree.chart.JFreeChart; 12 import org.jfree.chart.axis.CategoryAxis; 13 import org.jfree.chart.axis.NumberAxis; 14 import org.jfree.chart.axis.NumberTickUnit; 15 importorg.jfree.chart.labels.StandardCategoryItemLabelGenerator; 16 import org.jfree.chart.plot.CategoryPlot; 17 import org.jfree.chart.plot.PlotOrientation; 18 import org.jfree.chart.renderer.category.LineAndShapeRenderer; 19 import org.jfree.data.category.DefaultCategoryDataset; 20 21 /** 22 * 使用 JFreeChart 技術畫折線圖 23 * 24 * @describe 25 * @author zfc 26 * @date 2017年12月28日 下午7:21:51 27 */ 28 public class LineChart { 29 public static void main(String[] args) { 30 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); 31 // 添加數據 32 dataset.addValue(98, "數學", "張三"); 33 dataset.addValue(68, "數學", "李四"); 34 dataset.addValue(56, "數學", "王五"); 35 JFreeChart chart = ChartFactory.createLineChart("用戶統計報表(所屬單位)", // 主標題的名稱 36 "所屬單位名稱", // X軸的標簽 37 "數量", // Y軸的標簽 38 dataset, // 圖標顯示的數據集合 39 PlotOrientation.VERTICAL, // 圖像的顯示形式(水平或者垂直) 40 true, // 是否顯示子標題 41 true, // 是否生成提示的標簽 42 true); // 是否生成URL鏈接 // 處理圖形上的亂碼 // 處理主標題的亂碼 43 chart.getTitle().setFont(new Font("宋體", Font.BOLD, 18)); 44 // 處理子標題亂碼 45 chart.getLegend().setItemFont(new Font("宋體", Font.BOLD, 15)); 46 // 獲取圖表區域對象 47 CategoryPlot categoryPlot = (CategoryPlot) chart.getPlot(); 48 // 獲取X軸的對象 49 CategoryAxis categoryAxis = (CategoryAxis) categoryPlot.getDomainAxis(); 50 // 獲取Y軸的對象 51 NumberAxis numberAxis = (NumberAxis) categoryPlot.getRangeAxis(); 52 // 處理X軸上的亂碼 53 categoryAxis.setTickLabelFont(new Font("宋體", Font.BOLD, 15)); 54 // 處理X軸外的亂碼 55 categoryAxis.setLabelFont(new Font("宋體", Font.BOLD, 15)); 56 // 處理Y軸上的亂碼 57 numberAxis.setTickLabelFont(new Font("宋體", Font.BOLD, 15)); 58 // 處理Y軸外的亂碼 59 numberAxis.setLabelFont(new Font("宋體", Font.BOLD, 15)); 60 // 處理Y軸上顯示的刻度,以10作為1格 61 numberAxis.setAutoTickUnitSelection(false); 62 NumberTickUnit unit = new NumberTickUnit(10); 63 numberAxis.setTickUnit(unit); 64 // 獲取繪圖區域對象 65 LineAndShapeRenderer lineAndShapeRenderer = (LineAndShapeRenderer) categoryPlot.getRenderer(); 66 // 在圖形上顯示數字 67 lineAndShapeRenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); 68 lineAndShapeRenderer.setBaseItemLabelsVisible(true); 69 lineAndShapeRenderer.setBaseItemLabelFont(new Font("宋體", Font.BOLD, 15)); 70 // 在圖形上添加轉折點(使用小矩形顯示) 71 Rectangle shape = new Rectangle(10, 10); 72 lineAndShapeRenderer.setSeriesShape(0, shape); 73 lineAndShapeRenderer.setSeriesShapesVisible(0, true); 74 /* 8、生成相應的圖片 */ 75 File file = new File("LineChart.JPEG"); 76 try { 77 ChartUtilities.saveChartAsJPEG(file, chart, 800, 600); 78 } catch (IOException e) { 79 e.printStackTrace(); 80 } 81 // 使用ChartFrame對象顯示圖像 82 ChartFrame frame = new ChartFrame("zfc", chart); 83 frame.setVisible(true); 84 frame.pack(); 85 } 86 }
3、運行結果
JFreeChart 之折線圖