1,ichartjs(國產)(http://www.ichartjs.com/) ===============強烈推薦
ichartjs是一款優秀的國產開源插件,作者是王鶴,英文名taylor,畢業於南昌大學軟件工程專業。
ichartjs 是一款基於HTML5的圖形庫。使用純javascript語言, 利用HTML5的canvas標簽繪制各式圖形。 ichartjs致力於為您的應用提供簡單、直觀、可交互的體驗級圖表組件。是WEB/APP圖表展示方面的解決方案 。如果你正在開發HTML5的應用,ichartjs正好適合您。 ichartjs目前支持餅圖、環形圖、折線圖、面積圖、柱形圖、條形圖。ichartjs是基於Apache License 2.0協議的開源項目。
2,echarts(國產)(http://echarts.baidu.com/)
Echarts是百度前端團隊做的基於html5-canvas的開源圖表繪制組件。
幾個特性如下:
拖拽重計算:拖拽重計算特性(專利)帶來了數據統計圖表從未有過的用戶體驗,允許用戶對統計數據進行有效的提取、整合,甚至在多個圖表間交換數據,賦予了用戶對數據進行挖掘、整合的能力。
大 規模數據模式:如何展現成千上百萬的數據?貌似除了用專業的統計工具(如MATLAB)外別無選擇?不,在擁有眾多交互特性下ECharts依然可以做到 直角系圖表(折、柱、散點、K線)20萬數據秒級出圖。 值域漫游:基於坐標的圖表(如地圖、散點圖)通過色彩變化表現數值的大小能直觀形象的展示數據分布。但如何聚焦到我所關心的數值上?ECharts擁有值 域漫游的功能,讓你可以輕松進行數值篩選
3,Chart.js(http://www.chartjs.org/)
小巧而輕便的的圖表插件,缺點是支持的圖形類型較少,數據交互功能也非常有限,但作者以后可能會逐漸完善。
10款免費而優秀的圖表JS插件
4,HighChart.js(http://www.highcharts.com/)
5,Jqplot(http://www.jqplot.com/)
一個相當古老而“堅挺”的圖表插件,支持現代瀏覽器和IE7,IE8(和LoongChart一樣,拋棄IE6了)。
10款免費而優秀的圖表JS插件
目前來說,可以在其中選擇一兩種完全可以滿足我們的開發需求;
當然,還有我們最原始的方法:使用 jfreechart 生成 曲線、柱狀圖、餅狀圖、分布圖 展示到JSP
局限性很大:例如只能展示在jsp頁面,而且使用起來比較雜亂
給個例子:生成柱狀圖
package com.xidian.servlet; import java.awt.Color; import java.awt.Font; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartUtilities; import org.jfree.chart.JFreeChart; import org.jfree.chart.axis.CategoryAxis; import org.jfree.chart.axis.NumberAxis; import org.jfree.chart.plot.CategoryPlot; import org.jfree.chart.plot.PlotOrientation; import org.jfree.chart.renderer.category.BarRenderer; import org.jfree.chart.title.TextTitle; import org.jfree.data.category.DefaultCategoryDataset; /** * 生產柱狀圖 * @說明 * @author cuisuqiang * @version 1.0 * @since */ @SuppressWarnings("serial") public class PillarServlet extends HttpServlet { @Override protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); // 使用普通數據集 DefaultCategoryDataset chartDate = new DefaultCategoryDataset(); // 增加測試數據,第一個參數是訪問量,最后一個是時間,中間是顯示用不考慮 chartDate.addValue(55, "訪問量", "2010-01"); chartDate.addValue(65, "訪問量", "2010-02"); chartDate.addValue(59, "訪問量", "2010-03"); chartDate.addValue(156, "訪問量", "2010-04"); chartDate.addValue(452, "訪問量", "2010-05"); chartDate.addValue(359, "訪問量", "2010-06"); try { // 從數據庫中獲得數據集 DefaultCategoryDataset data = chartDate; // 使用ChartFactory創建3D柱狀圖,不想使用3D,直接使用createBarChart JFreeChart chart = ChartFactory.createBarChart3D( "網站月訪問量統計", // 圖表標題 "時間", // 目錄軸的顯示標簽 "訪問量", // 數值軸的顯示標簽 data, // 數據集 PlotOrientation.VERTICAL, // 圖表方向,此處為垂直方向 // PlotOrientation.HORIZONTAL, //圖表方向,此處為水平方向 true, // 是否顯示圖例 true, // 是否生成工具 false // 是否生成URL鏈接 ); // 設置整個圖片的背景色 chart.setBackgroundPaint(Color.PINK); // 設置圖片有邊框 chart.setBorderVisible(true); Font kfont = new Font("宋體", Font.PLAIN, 12); // 底部 Font titleFont = new Font("宋體", Font.BOLD, 25); // 圖片標題 // 圖片標題 chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont)); // 底部 chart.getLegend().setItemFont(kfont); // 得到坐標設置字體解決亂碼 CategoryPlot categoryplot = (CategoryPlot) chart.getPlot(); categoryplot.setDomainGridlinesVisible(true); categoryplot.setRangeCrosshairVisible(true); categoryplot.setRangeCrosshairPaint(Color.blue); NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis(); numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); BarRenderer barrenderer = (BarRenderer) categoryplot.getRenderer(); barrenderer.setBaseItemLabelFont(new Font("宋體", Font.PLAIN, 12)); barrenderer.setSeriesItemLabelFont(1, new Font("宋體", Font.PLAIN, 12)); CategoryAxis domainAxis = categoryplot.getDomainAxis(); /*------設置X軸坐標上的文字-----------*/ domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11)); /*------設置X軸的標題文字------------*/ domainAxis.setLabelFont(new Font("宋體", Font.PLAIN, 12)); /*------設置Y軸坐標上的文字-----------*/ numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12)); /*------設置Y軸的標題文字------------*/ numberaxis.setLabelFont(new Font("宋體", Font.PLAIN, 12)); /*------這句代碼解決了底部漢字亂碼的問題-----------*/ chart.getLegend().setItemFont(new Font("宋體", Font.PLAIN, 12)); // 生成圖片並輸出 ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1.0f, chart, 500, 300, null); } catch (Exception e) { e.printStackTrace(); } } }
由代碼來看,遠沒有使用js插件來的方便