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