2011年6月1日 星期三

[ Java 文章收集 ] JFreeChart 入門教學 (Part 2)


Bar Chart Demo (長條圖) :
底下我們將建立長條圖, 用來代表 John, Tom, Jill, John, Fred 的業績比較.
- 建立長條圖範例代碼
  1. // Create a simple Bar chart  
  2. DefaultCategoryDataset dataset = new DefaultCategoryDataset();  
  3. dataset.setValue(6"Profit""Jane");  
  4. dataset.setValue(7"Profit""Tom");  
  5. dataset.setValue(8"Profit""Jill");  
  6. dataset.setValue(5"Profit""John");  
  7. dataset.setValue(12"Profit""Fred");  
  8. JFreeChart chart = ChartFactory.createBarChart("Comparison between Salesman",  
  9. "Salesman""Profit", dataset, PlotOrientation.VERTICAL,  
  10. falsetruefalse);  

執行結果 :


- 使用說明
這裡使用的數據容器是 DefaultCategoryDataset :
  1. DefaultCategoryDataset dataset = new DefaultCategoryDataset();  
  2. dataset.setValue(6, “Profit”, “Jane”);  
而使用建立圖表的方法是 createBarChart() :
  1. JFreeChart chart = ChartFactory.createBarChart(  
  2.                 "Comparison between Salesman"// title  
  3.                 "Salesman"// category Axis Label  
  4.                 "Profit"// value Axis Label  
  5.                 dataset,   
  6.                 PlotOrientation.VERTICAL,  
  7.                 false,   
  8.                 true,   
  9.                 false);  
如果要表現 3D 的 Bar Chart 也是可以拉, 透過方法 createBarChart3D(). 代碼如下 (提供數據 two bars per person):
  1. ...  
  2.     dataset.setValue(5+rdm.nextInt(5), "Profit1""Jane");  
  3.     dataset.setValue(6+rdm.nextInt(4), "Profit2""Jane");  
  4.     dataset.setValue(3+rdm.nextInt(6), "Profit1""Tom");  
  5.     dataset.setValue(4+rdm.nextInt(6), "Profit2""Tom");  
  6.     dataset.setValue(6+rdm.nextInt(3), "Profit1""Jill");  
  7.     dataset.setValue(6+rdm.nextInt(4), "Profit2""Jill");  
  8.     dataset.setValue(7+rdm.nextInt(3), "Profit1""John");  
  9.     dataset.setValue(8+rdm.nextInt(2), "Profit2""John");  
  10.     dataset.setValue(1+rdm.nextInt(9), "Profit1""Fred");  
  11.     dataset.setValue(5+rdm.nextInt(5), "Profit2""Fred");  
  12.     JFreeChart chart = ChartFactory.createBarChart(  
  13.                 "Comparison between Salesman"// title  
  14.                 "Salesman"// category Axis Label  
  15.                 "Profit"// value Axis Label  
  16.                 dataset,   
  17.                 PlotOrientation.VERTICAL,  
  18.                 false,   
  19.                 true,   
  20.                 false);  
  21. ...  
執行結果 :


最後如果你要改變圖表的外觀, 也是 Piece of cake 拉, 參考代碼如下 :
  1. ...  
  2.     chart.setBackgroundPaint(Color.yellow); // Set the background colour of the chart  
  3.     chart.getTitle().setPaint(Color.blue); // Adjust the colour of the title  
  4.     CategoryPlot p = chart.getCategoryPlot(); // Get the Plot object for a bar graph  
  5.     p.setBackgroundPaint(Color.black); // Modify the plot background  
  6.     p.setRangeGridlinePaint(Color.red); // Modify the colour of the plot gridlines  
  7. ...  
執行結果 :


Time Series Demo :
在這個範例中可以發現跟 XYChart 有點像, 只是 X 座標的輸入不再是數字而是代表時間的 Day 類別, 參考代碼如下.
- Time-Series 圖表範例代碼
  1. // Create a time series chart  
  2. TimeSeries pop = new TimeSeries("Population", Day.class);  
  3. pop.add(new Day(1012004), 100);  
  4. pop.add(new Day(1022004), 150);  
  5. pop.add(new Day(1032004), 250);  
  6. pop.add(new Day(1042004), 275);  
  7. pop.add(new Day(1052004), 325);  
  8. pop.add(new Day(1062004), 425);  
  9. TimeSeriesCollection dataset = new TimeSeriesCollection();  
  10. dataset.addSeries(pop);  
  11. JFreeChart chart = ChartFactory.createTimeSeriesChart(  
  12.     "Population of CSC408 Town",   
  13.     "Date",  
  14.     "Population",  
  15.     dataset,  
  16.     true,  
  17.     true,  
  18.     false);  
  19. // Change the Date format displayed in X axis  
  20. XYPlot plot = chart.getXYPlot();  
  21. DateAxis axis = (DateAxis) plot.getDomainAxis();  
  22. axis.setDateFormatOverride(new SimpleDateFormat("dd-MM-yyyy"));  

執行結果 :


- 使用說明
這裡跟 XYChart 一樣, 需要兩個類別來記錄數據. 一個是 TimeSeries 用來記錄數據 (包含時間與對應該時間的數據) 與 TimeSeriesCollection 用來記錄多個 TimeSeries :
  1. TimeSeries pop = new TimeSeries("Population");  
  2. TimeSeriesCollection dataset = new TimeSeriesCollection();  
  3. dataset.addSeries(pop);  
接著使用方法 createTimeSeriesChart() 來建立圖表 :
  1. JFreeChart chart = ChartFactory.createTimeSeriesChart(  
  2.                 "Population of CSC408 Town"// title  
  3.                 "Date"// time Axis Label  
  4.                 "Population"// value Axis Label  
  5.                 dataset,  
  6.                 true// a flag specifying whether or not a legend is required.  
  7.                 true// configure chart to generate tool tips?  
  8.                 false); // configure chart to generate URLs?  
最後下面的代碼是用來改變顯示的時間格式 (X axis) :
  1. XYPlot plot = chart.getXYPlot();  
  2. DateAxis axis = (DateAxis) plot.getDomainAxis();  
  3. axis.setDateFormatOverride(new SimpleDateFormat("dd-MM-yyyy"));   
This message was edited 5 times. Last update was at 01/06/2011 17:25:00

3 則留言:

  1. 文章內容豐富,解說也很詳細

    更重要的是圖文並茂又不拖泥帶水

    對我收穫良多 感謝作者分享

    回覆刪除
  2. 你的分享真的寫得很不賴欸!
    在網路上找尋救援都可以看得很開心!

    回覆刪除
    回覆
    1. 其實也是剛好用到, 才整理出來. 很高興對其他人也有幫助瞜 ^^

      刪除

[Git 常見問題] error: The following untracked working tree files would be overwritten by merge

  Source From  Here 方案1: // x -----删除忽略文件已经对 git 来说不识别的文件 // d -----删除未被添加到 git 的路径中的文件 // f -----强制运行 #   git clean -d -fx 方案2: 今天在服务器上  gi...