日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JFreeChart 使用介绍

發布時間:2024/4/15 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JFreeChart 使用介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

URL:http://www.huosen.net/archives/156.html

一、簡介

JFreeChart是JAVA平臺上的一個開放的圖表繪制類庫。它完全使用JAVA語言編寫,是為applications, applets, servlets 以及JSP等使用所設計。
JFreeChart可生成餅圖(pie charts)、柱狀圖(bar charts)、散點圖(scatter plots)、時序圖(time series)、甘特圖(Gantt charts)等等多種圖表,并且可以產生PNG和JPEG格式的輸出,還可以與PDF和EXCEL關聯。

二、下載安裝

1 相關網址:

  • 官方網址?http://www.jfree.org
  • 官方文檔?http://www.jfree.org/jfreechart/api/javadoc/index.html
  • 官方下載?http://www.jfree.org/jfreechart/download.html
  • 2 所需jar包:

  • 解壓jfreechart-1.0.14.zip,并打開lib文件夾;
  • 將jfreechart-1.0.14.jar、jcommon-1.0.17.jar導入自己的工程當中;
  • 三、配置使用:

    下面介紹生成柱狀圖、餅圖、折線圖的簡單生成方式及生成的圖的展現方式,如:圖片文件、jsp頁面。


    下邊的方法為生成柱狀圖的方法:

    /*** 創建柱狀圖* @param chartTitle 圖表標題* @param xName x軸標題* @param yName y軸標題* @param dataset 數據集* @return*/ public static JFreeChart createChart(String chartTitle, String xName,String yName, CategoryDataset dataset) {/*** createBarChart的參數分別為:* 標題,橫坐標標題,縱坐標標題,數據集,圖標方向(水平、垂直)* ,是否顯示圖例,是否顯示tooltips,是否urls*/JFreeChart chart = ChartFactory.createBarChart(chartTitle, xName, yName,dataset, PlotOrientation.VERTICAL,true, true, false);/*** VALUE_TEXT_ANTIALIAS_OFF表示將文字的抗鋸齒關閉,* 使用的關閉抗鋸齒后,字體盡量選擇12到14號的宋體字,這樣文字最清晰好看*/chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);// 背景色chart.setBackgroundPaint(Color.white);// 設置標題字體chart.getTitle().setFont(new Font("宋體", Font.BOLD, 14));// 圖例背景色chart.getLegend().setBackgroundPaint(new Color(110, 182, 229));// 圖例字體chart.getLegend().setItemFont(new Font("宋體", Font.PLAIN, 12));CategoryPlot categoryPlot = (CategoryPlot) chart.getPlot();// 設置縱虛線可見//categoryPlot.setDomainGridlinesVisible(true);// 虛線色彩//categoryPlot.setDomainGridlinePaint(Color.black);// 設置橫虛線可見categoryPlot.setRangeGridlinesVisible(true);// 虛線色彩categoryPlot.setRangeGridlinePaint(Color.black);// 設置柱的透明度categoryPlot.setForegroundAlpha(1.0f);//設置柱圖背景色(注意,系統取色的時候要使用//16位的模式來查看顏色編碼,這樣比較準確)categoryPlot.setBackgroundPaint(new Color(110, 182, 229));/** categoryPlot.setRangeCrosshairVisible(true);* categoryPlot.setRangeCrosshairPaint(Color.blue);*/// 縱坐標--范圍軸NumberAxis numberAxis = (NumberAxis) categoryPlot.getRangeAxis();// 縱坐標y軸坐標字體numberAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));// 縱坐標y軸標題字體numberAxis.setLabelFont(new Font("宋體", Font.PLAIN, 12));// 設置最高的一個 Item 與圖片頂端的距離// numberAxis.setUpperMargin(0.5);// 設置最低的一個 Item 與圖片底端的距離// numberAxis.setLowerMargin(0.5);// 設置刻度單位 為IntegernumberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());// 橫坐標--類別軸、域CategoryAxis categoryAxis = categoryPlot.getDomainAxis();// 橫坐標x軸坐標字體categoryAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));// 橫坐標x軸標題字體categoryAxis.setLabelFont(new Font("宋體", Font.PLAIN, 12));// 類別軸的位置,傾斜度categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(0.5235987755982988D));//橫軸上的 Lable//categoryAxis.setMaximumCategoryLabelWidthRatio(0.6f);//是否完整顯示//設置距離圖片左端距離categoryAxis.setLowerMargin(0.1D);// 設置距離圖片右端距離categoryAxis.setUpperMargin(0.1D);// 渲染 - 中間的部分BarRenderer barRenderer = (BarRenderer) categoryPlot.getRenderer();// 設置柱子寬度barRenderer.setMaximumBarWidth(0.05);// 設置柱子高度barRenderer.setMinimumBarLength(0.2);// 設置柱子邊框顏色barRenderer.setBaseOutlinePaint(Color.BLACK);// 設置柱子邊框可見barRenderer.setDrawBarOutline(true);// 設置柱的顏色barRenderer.setSeriesPaint(0, new Color(0, 255, 0));barRenderer.setSeriesPaint(1, new Color(0, 0, 255));barRenderer.setSeriesPaint(2, new Color(255, 0, 0));// 設置每個柱之間距離barRenderer.setItemMargin(0.2D);// 顯示每個柱的數值,并修改該數值的字體屬性barRenderer.setIncludeBaseInRange(true);barRenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());barRenderer.setBaseItemLabelsVisible(true);return chart; }
    柱狀圖的數據集:

    /*** 柱狀圖數據集** @return*/ public static CategoryDataset createDataset() {String str1 = "Java EE開發";String str2 = "IOS開發";String str3 = "Android開發";String str4 = "1月";String str5 = "2月";String str6 = "3月";String str7 = "4月";String str8 = "5月";DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(1.0D, str1, str4);dataset.addValue(4.0D, str1, str5);dataset.addValue(3.0D, str1, str6);dataset.addValue(5.0D, str1, str7);dataset.addValue(5.0D, str1, str8);dataset.addValue(5.0D, str2, str4);dataset.addValue(7.0D, str2, str5);dataset.addValue(6.0D, str2, str6);dataset.addValue(8.0D, str2, str7);dataset.addValue(4.0D, str2, str8);dataset.addValue(4.0D, str3, str4);dataset.addValue(3.0D, str3, str5);dataset.addValue(2.0D, str3, str6);dataset.addValue(3.0D, str3, str7);dataset.addValue(6.0D, str3, str8);return dataset; }

    2 餅圖:


    下邊為餅圖的生成方法和數據的生成方式:

    /*** 生成餅圖* @param chartTitle 圖的標題* @param dataset 數據集* @param pieKeys 分餅的名字集* @return*/ public static JFreeChart createPieChart3D(String chartTitle,PieDataset dataset,String[] pieKeys) {JFreeChart chart = ChartFactory.createPieChart3D(chartTitle,dataset,true,//顯示圖例true,false);//關閉抗鋸齒,是字體清晰chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);chart.setTextAntiAlias(false);//圖片背景色chart.setBackgroundPaint(Color.white);//設置圖標題的字體重新設置titleFont font = new Font("隸書", Font.BOLD, 25);chart.getTitle().setFont(font);/*TextTitle title = new TextTitle(chartTitle);title.setFont(font);chart.setTitle(title);*///設置圖例字體chart.getLegend().setItemFont(new Font("宋體",Font.PLAIN,14));PiePlot3D plot = (PiePlot3D) chart.getPlot();// 圖片中顯示百分比:默認方式// 指定餅圖輪廓線的顏色// plot.setBaseSectionOutlinePaint(Color.BLACK);// plot.setBaseSectionPaint(Color.BLACK);// 設置無數據時的信息plot.setNoDataMessage("無對應的數據,請重新查詢。");// 設置無數據時的信息顯示顏色plot.setNoDataMessagePaint(Color.red);// 圖片中顯示百分比:自定義方式,{0} 表示選項,//{1} 表示數值, {2} 表示所占比例 ,小數點后兩位plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(),new DecimalFormat("0.00%")));//圖片顯示字體plot.setLabelFont(new Font("宋體", Font.TRUETYPE_FONT, 12));// 圖例顯示百分比:自定義方式, {0} 表示選項,//{1} 表示數值, {2} 表示所占比例plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})"));// 指定圖片的透明度(0.0-1.0)plot.setForegroundAlpha(0.65f);// 指定顯示的餅圖上圓形(false)還橢圓形(true)plot.setCircular(false, true);// 設置第一個 餅塊section 的開始位置,默認是12點鐘方向plot.setStartAngle(90);// // 設置分餅顏色plot.setSectionPaint(pieKeys[0], new Color(244, 194, 144));plot.setSectionPaint(pieKeys[1], new Color(144, 233, 144));return chart; } // 餅狀圖 數據集 public static PieDataset getDataPieSetByUtil(double[] data,String[] datadescription) {if (data != null && datadescription != null) {if (data.length == datadescription.length) {DefaultPieDataset dataset = new DefaultPieDataset();for (int i = 0; i < data.length; i++) {dataset.setValue(datadescription[i], data[i]);}return dataset;}}return null; }

    3 折線圖:


    下邊為折線圖的生成方法,其中,數據集的生成方式和柱狀圖類似:

    /*** 生成折線圖* @param chartTitle 圖的標題* @param x 橫軸標題* @param y 縱軸標題* @param dataset 數據集* @return*/ public static JFreeChart createLineChart(String chartTitle, String x,String y, CategoryDataset dataset) {// 構建一個chartJFreeChart chart = ChartFactory.createLineChart(chartTitle,x,y,dataset,PlotOrientation.VERTICAL,true,true,false);//字體清晰chart.setTextAntiAlias(false);// 設置背景顏色chart.setBackgroundPaint(Color.WHITE);// 設置圖標題的字體Font font = new Font("隸書", Font.BOLD, 25);chart.getTitle().setFont(font);// 設置面板字體Font labelFont = new Font("SansSerif", Font.TRUETYPE_FONT, 12);// 設置圖示的字體chart.getLegend().setItemFont(labelFont);CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();// x軸 // 分類軸網格是否可見categoryplot.setDomainGridlinesVisible(true);// y軸 //數據軸網格是否可見categoryplot.setRangeGridlinesVisible(true);categoryplot.setRangeGridlinePaint(Color.WHITE);// 虛線色彩categoryplot.setDomainGridlinePaint(Color.WHITE);// 虛線色彩categoryplot.setBackgroundPaint(Color.lightGray);// 折線圖的背景顏色// 設置軸和面板之間的距離// categoryplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));// 橫軸 xCategoryAxis domainAxis = categoryplot.getDomainAxis();domainAxis.setLabelFont(labelFont);// 軸標題domainAxis.setTickLabelFont(labelFont);// 軸數值// domainAxis.setLabelPaint(Color.BLUE);//軸標題的顏色// domainAxis.setTickLabelPaint(Color.BLUE);//軸數值的顏色// 橫軸 lable 的位置 橫軸上的 Lable 45度傾斜 DOWN_45domainAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD);// 設置距離圖片左端距離domainAxis.setLowerMargin(0.0);// 設置距離圖片右端距離domainAxis.setUpperMargin(0.0);// 縱軸 yNumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();numberaxis.setLabelFont(labelFont);numberaxis.setTickLabelFont(labelFont);numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());numberaxis.setAutoRangeIncludesZero(true);// 獲得renderer 注意這里是下嗍造型到lineandshaperenderer!!LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer) categoryplot.getRenderer();lineandshaperenderer.setBaseShapesVisible(true); // series 點(即數據點)可見lineandshaperenderer.setBaseLinesVisible(true); // series 點(即數據點)間有連線可見// 顯示折點數據lineandshaperenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());lineandshaperenderer.setBaseItemLabelsVisible(true);return chart; }

    4 圖表的顯示方式:

    我總結了三種使用情況,分別為:
    ①生成圖片到指定目錄的方式;
    ②在servlet中使用,并在jsp頁面中顯示圖片;
    ③在struts2中使用,并在jsp頁面中顯示圖片;

    第一種

    第一種為生成指定的圖片到指定的目錄
    需要用到ChartUtilities類的writeChartAsPNG方法,具體使用方式如下:

    FileOutputStream fosChart = null; try {//文件夾不存在則創建File file = new File(CHART_PATH);if (!file.exists()) {file.mkdirs();}String chartName = CHART_PATH + charName;fosChart = new FileOutputStream(chartName);//高寬的設置影響橢圓餅圖的形狀ChartUtilities.writeChartAsPNG(fosChart, chart, 500, 230);return chartName; } catch (Exception e) {e.printStackTrace(); } finally {try {fosChart.close();} catch (Exception e) {e.printStackTrace();} }

    其中,CHART_PATH為文件路徑,charName為生成圖的名稱

    第二種

    第二種為在servlet中使用,需要配置servlet,生成的圖片會自動存放至tomcat服務器的temp臨時文件夾下,具體如下:
    首先配置訪問圖片的servlet的請求:

    <!-- 配置jfreechart 的servlet,用來訪問圖片的請求 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>/DisplayChart</url-pattern> </servlet-mapping>然后在servlet中,使用ServletUtilities.saveChartAsPNG方法生成臨時文件,并返回文件名稱,客戶端就可以根據url去訪問臨時圖片了。
    //ServletUtilities是面向web開發的工具類,返回一個字符串文件名, //文件名自動生成,生成好的圖片會自動放在服務器的臨時文件下(temp) String filename = ServletUtilities.saveChartAsPNG(chart, 800, 400, null, request.getSession());//根據文件名去臨時目錄下尋找該圖片, //這里的/DisplayChart路徑要與配置文件里用戶自定義的一致 String graphURL = request.getContextPath() +"/DisplayChart?filename=" + filename;request.setAttribute("imgurl", graphURL); request.getRequestDispatcher("index.jsp").forward(request, response);
    第三種

    第三種是在struts2中使用jfreechart,需要添加在struts2中添加jfreechart支持,即添加struts2-jfreechart-plugin-2.3.1.2.jar
    然后配置struts.xml配置文件添加:

    800400<!-- 對應上邊引用的result type chart -->
    最后,需要在Action的某方法中,給JFreeChart對象賦值,并實現get方法,即可通過頁面訪問該action得到圖片。

    private JFreeChart chart; public String barchart() {try {chart = chequeService.getBarchart();} catch (Exception e) {e.printStackTrace();}return SUCCESS; } public JFreeChart getChart() {return chart; } public void setChart(JFreeChart chart) {this.chart = chart; }
    源碼地址:https://github.com/huozhicheng/JFreeChart
    我的相關資源已經上傳到:http://download.csdn.net/detail/cxc19890214/7900073





    總結

    以上是生活随笔為你收集整理的JFreeChart 使用介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。