jsp中JFreeChart柱狀圖的詳細使用__js

來源:互聯網
上載者:User

 

首先匯入包JFreeChart和JCommon

其次配置web.xml調用的現成的顯示類

  < 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 > /servlet/DisplayChart </ url-pattern >
     </ servlet-mapping >

 

柱狀圖類的詳細執行個體

 

<%@ page contentType="text/html;charset=GBK"%> <%@ page import="java.awt.Color, org.jfree.chart.ChartFactory, org.jfree.chart.JFreeChart, org.jfree.chart.plot.PlotOrientation, org.jfree.chart.servlet.ServletUtilities, org.jfree.data.category.CategoryDataset, org.jfree.data.general.*, org.jfree.chart.plot.CategoryPlot, org.jfree.chart.axis.CategoryAxis, org.jfree.chart.axis.ValueAxis, org.jfree.chart.renderer.category.BarRenderer3D, org.jfree.chart.urls.StandardCategoryURLGenerator, org.jfree.chart.*, org.jfree.chart.entity.*, org.jfree.chart.labels.*, org.jfree.chart.axis.CategoryLabelPositions, java.awt.Font, java.awt.GradientPaint, org.jfree.ui.TextAnchor, org.jfree.chart.axis.NumberAxis, org.jfree.chart.axis.NumberTickUnit "%> <html> <body> <% java.io.PrintWriter pw=new java.io.PrintWriter(out); double[][] data = new double[][] {{500}, {200}, {-100}, {400}, {-600}, {300}}; String[] rowKeys = {"西紅柿", "梨子", "橙子", "桔子", "西瓜", "香蕉"}; String[] columnKeys = {""}; CategoryDataset dataset = DatasetUtilities.createCategoryDataset( rowKeys, columnKeys, data); JFreeChart chart = ChartFactory.createBarChart3D("水果生產圖統計", "水果名稱", //橫座標名稱 "產量", //縱座標名稱 dataset,//資料集合 PlotOrientation.VERTICAL,//圖形位置,水平還是垂直 true, false, false); chart.setBackgroundPaint(Color.WHITE); //設定背景色為白色 CategoryPlot categoryPlot = chart.getCategoryPlot(); //獲得 plot:3dBar為CategoryPlot categoryPlot.setBackgroundPaint(Color.lightGray); //設定圖表資料顯示部分背景色 categoryPlot.setDomainGridlinePaint(Color.white); //橫座標網格線白色 categoryPlot.setDomainGridlinesVisible(true); //設定網格線可見 categoryPlot.setRangeGridlinePaint(Color.white); //縱座標網格線白色 //擷取橫座標 CategoryAxis domainAxis = categoryPlot.getDomainAxis(); //設定 橫座標 垂直顯示 //domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(0.4)); //擷取縱座標 NumberAxis numberaxis = (NumberAxis)categoryPlot.getRangeAxis(); //將縱座標間距設定為50 numberaxis.setTickUnit(new NumberTickUnit(50)); //設定橫座標的標題字型和大小,此處是“宋體13號” domainAxis.setLabelFont(new Font("宋體",Font.PLAIN,13)); //設定距離圖片左端距離,參數為圖片的百分比 domainAxis.setLowerMargin(0.05); //設定距離圖片右端距離 domainAxis.setUpperMargin(0.05); //設定橫座標的座標值的字型 domainAxis.setTickLabelFont(new Font("宋體",Font.PLAIN,12)); //使橫座標設定生效 categoryPlot.setDomainAxis(domainAxis); ValueAxis rangeAxis = categoryPlot.getRangeAxis(); //設定最高的一個柱與圖片頂端的距離 rangeAxis.setUpperMargin(0.05); //設定最低的一個柱與圖片底端的距離 rangeAxis.setLowerMargin(0.05); categoryPlot.setRangeAxis(rangeAxis); //設定豎座標標籤的旋轉角度 rangeAxis.setLabelAngle(0.05); //重要的類,負責產生各種效果 BarRenderer3D renderer=(BarRenderer3D) categoryPlot.getRenderer(); //設定 Wall 的顏色 renderer.setWallPaint(Color.PINK); //設定每個柱的顏色 GradientPaint gradientpaint = new GradientPaint(0.0F, 0.0F, Color.blue, 0.0F, 0.0F, new Color(0, 0, 64)); //設定特定顏色 GradientPaint gradientpaint1 = new GradientPaint(0.0F, 0.0F, Color.green, 0.0F, 0.0F, new Color(0, 64, 0)); renderer.setSeriesPaint(0, gradientpaint); renderer.setSeriesPaint(1, gradientpaint1); //設定柱的 Outline 顏色 renderer.setSeriesOutlinePaint(0, Color.BLACK); renderer.setSeriesOutlinePaint(1, Color.BLACK); //設定每個category所包含的平行柱的之間距離 renderer.setItemMargin(0.1); //顯示每個柱的數值,並修改該數值的字型屬性 renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator()); //以下設定,將按照指定格式,制定內容顯示每個柱的數值。可以顯示柱名稱,所佔百分比 //renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator("{2}",new DecimalFormat("0.0%"))); //設定柱子上數值的字型 renderer.setItemLabelFont(new Font("宋體",Font.PLAIN,13)); renderer.setItemLabelsVisible(true); //設定柱子上資料的顏色 renderer.setItemLabelPaint(Color.RED); //設定bar的最小寬度,以保證能顯示數值 renderer.setMinimumBarLength(0.02); //最大寬度 //renderer.setMaximumBarWidth(0.07); //設定柱子上比例數值的顯示,如果按照預設顯示,數值為方向正常顯示 //設定柱子上顯示的資料旋轉90度,最後一個參數為旋轉的角度值/3.14 ItemLabelPosition itemLabelPosition= new ItemLabelPosition( ItemLabelAnchor.INSIDE12,TextAnchor.CENTER_RIGHT, TextAnchor.CENTER_RIGHT,-1.57D); //下面的設定是為瞭解決,當柱子的比例過小,而導致表示該柱子比例的數值無法顯示的問題 //設定不能在柱子上正常顯示的那些數值的顯示方式,將這些數值顯示在柱子外面 ItemLabelPosition itemLabelPositionFallback=new ItemLabelPosition( ItemLabelAnchor.OUTSIDE12,TextAnchor.BASELINE_LEFT, TextAnchor.HALF_ASCENT_LEFT,-1.57D); //設定正常顯示的柱子label的position renderer.setPositiveItemLabelPosition(itemLabelPosition); renderer.setNegativeItemLabelPosition(itemLabelPosition); //設定不能正常顯示的柱子label的position renderer.setPositiveItemLabelPositionFallback(itemLabelPositionFallback); renderer.setNegativeItemLabelPositionFallback(itemLabelPositionFallback); categoryPlot.setRenderer(renderer); //設定柱子的透明度 categoryPlot.setForegroundAlpha(0.8f); //為柱圖設定“資料挖陷” //第一個參數是跳轉的串連地址 renderer.setBaseItemURLGenerator(new StandardCategoryURLGenerator( "detail.jsp", "fruit", "")); //使設定生效 renderer.setBaseItemLabelsVisible(true); //設定柱的透明度 categoryPlot.setForegroundAlpha(0.5f); //設定地區、銷量的顯示位置 //plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT); ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); //產生圖形的名稱 //可以改變ServletUtilities原始碼,設定圖形統一首碼名稱和預設存放路徑 //注意:圖形的大小往往都是通過設定檔設定的,不可能所有圖形一個大小 String filename = ServletUtilities.saveChartAsPNG(chart, 800, 600, info, session); //調用DisplayChart(配置在webxml中),產生圖形 String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + filename; //將MAP資訊,寫入圖形 ChartUtilities.writeImageMap(pw, filename, info, true); pw.flush(); %> <table width="100%"> <tr> <td align="center"> <!-- 產生圖形 --> <img src="<%= graphURL %>" width=800 height=700 border=0 usemap="#<%= filename %>" alt=""> </td> </tr> </table> </body> </html>   

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.