1. 程式人生 > >Web在jsp頁面中生成柱狀圖,折線圖,餅狀圖

Web在jsp頁面中生成柱狀圖,折線圖,餅狀圖

一、前言

    在實際開發過程中,柱狀圖,折線圖,餅狀圖在一些OA,ERP中是非常常見的功能,特別是需求方是業務型,資料分析型公司,下面的例子簡單實現了餅狀圖,柱狀圖,折線圖在jsp中生成。(ps:新手上路,不喜勿噴)

二、前期準備
1.使用的框架:ssm(這裡不再配置);
2.需要的第三方包:jfreechart.jar和jcommon.jar

三、配置檔案的操作
web.xml:在web.xml中配置jfreechart

<!-- jfreechart配置 -->  
    <servlet>  
        <servlet-name>DisplayChart</servlet-name>  
        <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>  
    </servlet>  
    <servlet-mapping>  
        <servlet-name>DisplayChart</servlet-name>  
        <url-pattern>/chart</url-pattern>  
</servlet-mapping> 

四、主要程式碼

1.柱狀圖
(1).controller層

@RequestMapping(value = "getColumnChart.do")
public ModelAndView getColumnChart(HttpServletRequest request,
        HttpServletResponse response, ModelMap modelMap) throws Exception {
    // 在業務層獲取建立的柱狀圖(此時柱狀圖已經建立完成的)
    JFreeChart chart = columnarService.createColumnarTools();
    // 將圖形轉換為圖片傳到dateSet.jsp
    String fileName = ServletUtilities.saveChartAsJPEG(chart, 700, 400,
            null, request.getSession());
    String chartURL = request.getContextPath() + "/chart?filename="
            + fileName;
    modelMap.put("chartColumnURL", chartURL);
    return new ModelAndView("dateSet", modelMap);
}

(2)業務層
介面:

public interface ColumnarService {
public JFreeChart createColumnarTools();

}

實現介面:

@Service
public class ColumnaServicerImp implements ColumnarService {

 //從柱狀圖工具類裡面獲取建立的Columnar柱狀圖

public JFreeChart createColumnarTools() {
    // TODO Auto-generated method stub
    // 獲得資料
    CategoryDataset dataset = getDataSet();
    // 獲取柱狀圖工具類建立的柱狀圖,(將資料集傳入)
    JFreeChart chart = ColumnarTools.createCoColumnar(dataset);
    return chart;
}

 //獲取一個演示用的組合資料集物件 為柱狀圖新增資料

private static CategoryDataset getDataSet() {
    // 資料可以從資料庫中得到
    DefaultCategoryDataset dataset = new DefaultCategoryDataset();
    dataset.addValue(88, "外評", "上風港");
    dataset.addValue(86, "內評", "上風港");
    dataset.addValue(85, "外評", "瑞安");
    dataset.addValue(84, "內評", "瑞安");
    dataset.addValue(70, "外評", "花郡");
    dataset.addValue(65, "內評", "花郡");
    dataset.addValue(90, "外評", "IFS");
    dataset.addValue(88, "內評", "IFS");
    dataset.addValue(80, "外評", "萬達");
    dataset.addValue(75, "內評", "萬達");
    return dataset;
}

}

(3)寫一個柱狀圖的工具類

public class ColumnarTools {

 //建立一個柱狀圖

 //@param dataset
          柱狀圖資料
 // @return

public static JFreeChart createCoColumnar(CategoryDataset dataset) {
    // 建立柱狀圖
    JFreeChart chart = ChartFactory.createBarChart3D("各個專案評分統計", // 圖表標題
            "專案名", // x軸的顯示標籤
            "專案評分", // y軸的顯示標籤
            dataset, // 資料
            PlotOrientation.VERTICAL, // 圖表方向:水平、垂直
            true, // 顯示圖例
            true, // 生成工具
            true // URL連結
            );
    // 對整個圖形設定整個柱狀圖的顏色和文字針
    chart.setBackgroundPaint(ChartColor.WHITE); // 設定總的背景顏色
    // 獲得圖形物件,並通過此物件對圖形的顏色文字進行設定
    CategoryPlot polt = chart.getCategoryPlot();// 獲得圖表物件
    polt.setBackgroundPaint(ChartColor.lightGray);// 圖形背景顏色
    polt.setRangeGridlinePaint(ChartColor.WHITE);// 圖形表格顏色
    // 設定柱寬度
    BarRenderer renderer = (BarRenderer) polt.getRenderer();
    renderer.setMaximumBarWidth(0.06);
    renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
    renderer.setBaseItemLabelsVisible(true);
    renderer.setBaseItemLabelFont(new Font("宋體", Font.BOLD, 15));
    // 設定文字
    getChartByFont(chart);

    return chart;

}


//柱狀圖設定文字樣式
//
// @param chart

private static void getChartByFont(JFreeChart chart) {
    // 圖形設定標題文字
    TextTitle textTitle = chart.getTitle();
    textTitle.setFont(new Font("宋體", Font.BOLD, 20));

    // 設定圖形X軸座標文字
    CategoryPlot plot = (CategoryPlot) chart.getPlot();
    CategoryAxis axis = plot.getDomainAxis();
    axis.setLabelFont(new Font("宋體", Font.BOLD, 22)); // 設定X軸座標上標題的文字
    axis.setTickLabelFont(new Font("宋體", Font.BOLD, 15)); // 設定X軸座標上的文字

    // 設定圖形Y軸座標文字
    ValueAxis valueAxis = plot.getRangeAxis();
    valueAxis.setLabelFont(new Font("宋體", Font.BOLD, 12)); // 設定Y軸座標上標題的文字
    valueAxis.setTickLabelFont(new Font("sans-serif", Font.BOLD, 12));// 設定Y軸座標上的文字
    // 設定提示內容的文字
    chart.getLegend().setItemFont(new Font("宋體", Font.BOLD, 15));
}

}

柱狀圖的圖片就製作出來了,現在只需要傳輸到jsp頁面就可以了。

(4) dataSet.jsp

<style type="text/css">
.img{
width:800px;
height:600px;
border: 0;
color: gray;
} 
</style>
<div  style="text-align:center">  
                    柱狀圖 <br><br>  
                     點選生成柱狀圖<a href="getColumnChart.do">getMajorChart</a>  
     <br><br>  
     <img src="${chartColumnURL}" >  
  </div>
  <div  style="text-align:center">  
                餅狀圖 <br><br>  
                     點選生成餅狀圖<a href="getPieChart.do">getMajorChart</a>  
     <br><br>  
     <img src="${chartPieURL}" >  
  </div>  
   <div  style="text-align:center">  
               折線圖 <br><br>  
                     點選生成折線圖<a href="getLineChart.do">getMajorChart</a>  
     <br><br>  
     <img src="${chartLineURL}" >  
  </div>  

整個柱狀圖就在jsp能夠顯示了。
後面就是餅狀圖和折線圖的工具類和業務層了。 controller就不在贅述了,跟柱狀圖是一樣的

2.餅狀圖

(1) 業務層

   @Service
public class PieServiceImp implements PieService {
/**
 * 從餅狀圖工具類裡面獲取建立的Columnar柱狀圖
 */
public JFreeChart createPieTools() {
    // TODO Auto-generated method stub
    // 獲取餅狀圖的資料集
    DefaultPieDataset dataset = getDataSet();
    // 獲取餅狀圖工具類建立的餅狀圖
    JFreeChart chart = PieTools.createPie(dataset);
    return chart;
}

/**
 * 新增餅狀圖的資料
 * 
 * @return
 */
private static DefaultPieDataset getDataSet() {
    // 資料可以從資料庫中得到
    DefaultPieDataset dataset = new DefaultPieDataset();
    // 新增資料
    Map<String, Double> map = new HashMap<String, Double>();
    map.put("張三", (double) 33);
    map.put("李期", (double) 14);
    map.put("李四", (double) 27);
    map.put("王六", (double) 11);
    Double sum = 0.0;
    int count = map.size();
    Set<String> keys = map.keySet();
    for (String key : keys) {
        sum += sum + map.get(key);

    }
    for (String key : keys) {

        dataset.setValue(key, map.get(key));
    }
    // dataset.setValue("張三",30);
    // dataset.setValue("李四",12);
    // dataset.setValue("李四",12);
    // dataset.setValue("王六",10);

    return dataset;

}

(2) 工具類

public class PieTools {
/**
 * 建立餅狀圖
 * @param dataset 餅狀圖資料來源
 * @return
 */
public static JFreeChart createPie(DefaultPieDataset  dataset){
    //建立餅狀圖
    JFreeChart chart =ChartFactory.createPieChart3D("佔比分析", dataset, true, true, true);
    //為餅狀圖設定字型
    getChartByFont(chart);      
    return chart;
}
/**
 * 處理餅狀圖的文字
 * @param chart
 */
private static void getChartByFont(JFreeChart chart){
    //處理圖形上的亂碼
            //處理主標題的亂碼
            chart.getTitle().setFont(new Font("宋體",Font.BOLD,18));
            //處理子標題亂碼
            chart.getLegend().setItemFont(new Font("宋體",Font.BOLD,15));
            //獲取圖表區域物件
            PiePlot3D categoryPlot = (PiePlot3D)chart.getPlot();
            //處理影象上的亂碼
            categoryPlot.setLabelFont(new Font("宋體",Font.BOLD,15));
            //設定圖形的生成格式為(張三  23 (10%))(姓名 值 百分比)
            String fm = "{0} {1} ({2})";
            categoryPlot.setLabelGenerator(new StandardPieSectionLabelGenerator(fm));
}
}

3.折線圖

(1)業務層

@Service
public class FoldLineServiceImp implements FoldLineService{
 /**
 * 從折線圖工具類中獲取建立完成的折線圖
 */
public JFreeChart createFoldLineTools() {
    // TODO Auto-generated method stub
    //獲取折線圖資料來源
    DefaultCategoryDataset dataset=getDataSet();
    //從折線圖工具類中獲取建立完成的折線圖
    JFreeChart chart=FoldLineTools.createFoldLine(dataset);

    return chart;
}
/**
 * 為折線圖建立資料
 * @return
 */
public static DefaultCategoryDataset getDataSet(){
    //建立資料集
    DefaultCategoryDataset dataset=new DefaultCategoryDataset();
    //新增資料
    dataset.addValue(15636.36, "張三", "一月");
    dataset.addValue(10001.36, "張三", "二月");
    dataset.addValue(8856.20, "張三", "三月");
    dataset.addValue(5964.26, "張三", "四月");
    dataset.addValue(12365.23, "李四", "一月");
    dataset.addValue(20056.12, "李四", "二月");
    dataset.addValue(7896.36, "李四", "三月");
    dataset.addValue(23005.45, "李四", "四月");
    return dataset;

}

}

(2),工具類

public class FoldLineTools {
/**
 * 建立一個折線圖
 * 
 * @return
 */
public static JFreeChart createFoldLine(DefaultCategoryDataset dataset) {
    JFreeChart chart = ChartFactory.createLineChart("業績分析", "月份", "業績(元)",
            dataset, PlotOrientation.VERTICAL, true, true, true);
    // 資料的行數 即折線的條數
    int datasetSize = dataset.getRowCount();
    System.out.println(datasetSize);
    getChartByFont(chart, datasetSize);

    return chart;

}

/**
 * 處理折線圖上的文字
 * 
 * @param chart
 * @param datasetSize
 *            資料的行數 即折線的條數
 */
private static void getChartByFont(JFreeChart chart, int datasetSize) {
    // 處理主標題的文字
    chart.getTitle().setFont(new Font("宋體", Font.BOLD, 18));
    // 處理子標題文字
    chart.getLegend().setItemFont(new Font("宋體", Font.BOLD, 15));
    // 獲取圖表區域
    CategoryPlot categoryPlot = (CategoryPlot) chart.getPlot();
    // 獲取X軸
    CategoryAxis categoryAxis = (CategoryAxis) categoryPlot.getDomainAxis();
    // 獲取Y軸
    NumberAxis numberAxis = (NumberAxis) categoryPlot.getRangeAxis();
    // 處理X軸上的文字
    categoryAxis.setTickLabelFont(new Font("宋體", Font.BOLD, 12));
    // 處理X軸外的文字
    categoryAxis.setLabelFont(new Font("宋體", Font.BOLD, 12));
    // 處理Y軸上的文字
    numberAxis.setTickLabelFont(new Font("宋體", Font.BOLD, 15));
    // 處理Y軸外的文字
    numberAxis.setLabelFont(new Font("宋體", Font.BOLD, 15));
    // 處理Y軸上顯示的刻度,以5000作為1格
    numberAxis.setAutoTickUnitSelection(false);
    NumberTickUnit unit = new NumberTickUnit(5000);
    numberAxis.setTickUnit(unit);
    // 獲取繪圖區域
    LineAndShapeRenderer lineAndShapeRenderer = (LineAndShapeRenderer) categoryPlot
            .getRenderer();
    // 在圖形上顯示數字
    lineAndShapeRenderer
            .setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
    lineAndShapeRenderer.setBaseItemLabelsVisible(true);
    lineAndShapeRenderer
            .setBaseItemLabelFont(new Font("宋體", Font.BOLD, 10));
    // 在圖形上新增轉折點(小矩形)
    Rectangle shape = new Rectangle(5, 5);
    for (int i = 0; i < datasetSize; i++) {
        lineAndShapeRenderer.setSeriesShape(i, shape);
        lineAndShapeRenderer.setSeriesShapesVisible(i, true);
    }
}
}

至此,柱狀圖,餅狀圖,折線圖就製作完畢了,

五、效果圖
柱狀圖

這裡寫圖片描述

餅形圖

這裡寫圖片描述

折線圖

這裡寫圖片描述

六.結語
樓主使用的是spring+springMVC+MyBatiskuang框架。
其實這行圖形的製作在第三方包Jfreechart已經提供給我們了。只需要按照的它給的規範,根據自己需求設計就可以了。就像excel的匯入匯出,poi就是幫助我們做個事情的。
新手上路,如果問題,請多多包含。如有問題,歡迎留言。

相關推薦

Web在jsp頁面生成折線

一、前言 在實際開發過程中,柱狀圖,折線圖,餅狀圖在一些OA,ERP中是非常常見的功能,特別是需求方是業務型,資料分析型公司,下面的例子簡單實現了餅狀圖,柱狀圖,折線圖在jsp中生成。(ps:新手上路,不喜勿噴) 二、前期準備 1.使用的框架:s

Html頁面select下拉列表框別樣用法一個方法一勞永逸。

select 異步加載很多時候,我們寫from表單面,給select標簽賦值,都采用這種方式:1.MVC中設創建公共的分部視圖;2.直接在前臺面中,插入片段後臺代碼;今天我利用HTML5中的自定義屬性,結合JQ擴展方法,寫一個通用的JS方法,JS代碼如下: $.fn.SetSelect = funct

關於H5頁面生成圖片的兩種方式!

ima 前端 不能 圖片 項目 自定義 dom對象 技術分享 ron 前言: 我們在做項目過程中,經常會遇到自定義生成一張圖片並可以長按保存。長按保存圖片在微信等瀏覽器中默認就有,那麽對於生成圖片的有哪些方式呢? 方法一: 利用canvas繪制圖形,然後生成圖片 代碼如下:

測試引入的js檔案和直接在頁面寫的js程式碼執行的順序順便還有個疑問(即JavaScript變數宣告有var和沒var的區別)

測試引入的js檔案,和直接在頁面中寫的js程式碼執行的順序,順便還有個疑問(即JavaScript中變數宣告有var和沒var的區別),有時間再倒回來理解這個問題 <!DOCTYPE html> <html> <head> <meta charset

在同一個頁面多次使用swiper 輪播外掛要避免相互影響

在專案中使用輪播是很常見的,swiper 就是其中之一,pc 端,移動端都可以使用,效果還是不錯的;曾經在寫一個頁面的時候,其中有兩個輪播圖,於是都用swiper 來寫了,寫完之後發現顯示的效果不是預期的效果,有很大的問題;後來檢查發現兩個輪播圖相互影響了,樣式啥的衝突了,因

H5頁面的視訊輪播(類似於banner輪播效果)

先說下我的需求,如下圖: 手機模型中間部分是視訊播放,當一條視訊播放完畢後,整屏會自動上滑切換到下一個視訊。 提起輪播,我們看到的最多的就是banner輪播圖,而提起輪播圖,我會馬上想起用Swiper。 一開始為了快速開發,就想著用swiper來實

【JavaScript】怎樣在 js 生成指定值、個數的陣列包含相同元素的陣列

在刷演算法題的過程中,往往會需要設定 n 個 0 元素的陣列,例如 var a = [0,0,0,0, ... ,0]; 少一點,固定個數,可能就自己填了,但是多了,就不那麼容易處理了。查閱相

在servlet獲取jsp頁面選中的複選框的值並對其值進行操作。

jsp部分程式碼:<input type="checkbox" name="checkboxs" value="${stuInfo.sid}"/>動態的為複選框賦值servlet程式碼:String[] ids = request.getParameterValu

記一次非常無語的生成jsecshop。

width ecs fun ner text nbsp real mov span 如題,無語且非常郁悶。 要求是根據查詢出來的數據動態生成柱狀圖。但是ecshop的查詢ajax回調都是已經封裝好了的。根本就不能改。 無奈之下只好百度了一個畫柱狀圖的代碼,每隔2秒

關於安卓專案統計資料achartengine類(包括折線等)的使用

       最近由於專案中需要統計資料,通過比較直觀的方式展示給使用者,所以就抽時間學習了一個統計圖的類庫achartengine,裡面包含統計中所需的餅狀圖,柱狀圖,折線圖等等,所以就拿出來給大家分享一下,希望大家相互學習,如有不足之處

使用ECharts實現各種資料統計折線)在javaWeb的應用

具體的資源及頁面程式碼可下載  http://download.csdn.net/download/dll322/9912507 準備工作:要下載ECharts的原始檔 第一步:在web端既新建一個jsp頁面 第二步:引入ECharts的js 第三步:為EChart

echatrs同一個頁面多圖表展示折線油表地圖……

/* 卸車時間 */function drawUninstall(ec) {var myBarChart = ec.init(document.getElementById('uninstallGoods'));var option1 = {backgroundColor : '#1B1B1B',title

在echarts折線來回切換以及儲存為圖片的屬性

在setOption裡直接定義。 toolbox: {show: true,feature: {magicType: {type: ['line', 'bar'],show: false},dataZ

Java讀取數據庫數據生成

idl false create 統計 引入 chart console splay 數據 此案例是用swing顯示數據的。須要引入jfreechart相關包。不同版本號可能包不同樣。本人用的是 此案例在ssi框架下會報錯,不用框架就沒問題。 Java後臺邏輯代碼: p

JavaScript

column 註意 文件 label max number span item pointf <script type="text/javascript"> $(function () { $(‘#container_2‘).highcharts({

JavaScript數據可視化編程學習(一)Flotr2包含簡單的折線散點

基礎 沒有 cat 勝利 而是 5.4 最好的 表數據 聯系 一、基礎柱狀圖 二、基礎的折線圖 三、基礎的餅圖 四、基礎的散點圖 一、基礎柱狀圖 如果你還沒有想好你的數據用什麽類型的圖表來展示你的數據,你應該首先考慮是否可以做成柱狀圖。柱狀圖可以表示數據的

Thinkphp+ECharts生成

document ntb .com 邊框 blog 引入 類目 src end 1.首先進ECharts官網下載echarts.js 點擊下載,結合TP5講解,主要代碼在js裏面,更多請到ECharts官網 2.引進echarts.js <!DOCTYPE htm

ECharts 報表事件聯動系列三:實現聯動

餅狀圖 img and int js函數 radius func get 執行 源碼如下: <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type

如何使用Jfreechart生成

lai ans *** clas ldp 成了 get nts cal JFreeChart是JAVA平臺上的一個開放的圖表繪制類庫。 首先 (http://www.jfree.org /jfreechart) 總這個網址下載所需要的庫,然後解壓,放在某個地方。 我們默認的

PHP jpgraph庫的配置及生成統計圖表:折線

此文為轉載,僅作儲存文件使用,轉自:http://blog.csdn.net/aoshilang2249/article/details/46956163 注意:原文中提到配置php.ini中的include_path,親測不需要配置(gd2需要開啟),只需要將下載的檔案引入專案即可