程式扎記: [ Java 代碼範本 ] JFreeChart : 3D BarChart - Demo 3 (多維度的3D 長條圖)

標籤

2011年7月4日 星期一

[ Java 代碼範本 ] JFreeChart : 3D BarChart - Demo 3 (多維度的3D 長條圖)

前言 : 
這裡要展示的是多維的 3D BarChart, 因為是多維所以資料的容器使用類別 DefaultCategoryDataset, 而因為是 3D 的 Bar Chart, 所以透過 ChartFactory 的工廠方法createBarChart3D() 建立圖表. 而接著透過取出建立圖表的 CategoryAxis 進行顯示 Label 的旋轉 : 

  1. CategoryPlot plot = chart.getCategoryPlot();  
  2. // 設定 Label(Category1, Category2) 轉動角度 360度/8=45度  
  3. CategoryAxis axis = plot.getDomainAxis();  
  4. axis.setCategoryLabelPositions(  
  5.     CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 8.0)  
  6. );  
接著透過 BarRenderer 設定 Bar 的寬度 : 
  1. CategoryItemRenderer renderer = plot.getRenderer();  
  2. renderer.setBaseItemLabelsVisible(true);  
  3. BarRenderer r = (BarRenderer) renderer;  
  4. r.setMaximumBarWidth(0.06); // 設定 Single Bar width 佔 所有 Space 的百分比  

範例代碼 : 
顯示 3D 多維的 Bar Chart. 
- BarChart3DDemo3.java :
  1. package john.jfreechart.barchart;  
  2.   
  3. import org.jfree.chart.ChartFactory;  
  4. import org.jfree.chart.ChartPanel;  
  5. import org.jfree.chart.JFreeChart;  
  6. import org.jfree.chart.axis.CategoryAxis;  
  7. import org.jfree.chart.axis.CategoryLabelPositions;  
  8. import org.jfree.chart.plot.CategoryPlot;  
  9. import org.jfree.chart.plot.PlotOrientation;  
  10. import org.jfree.chart.renderer.category.BarRenderer;  
  11. import org.jfree.chart.renderer.category.CategoryItemRenderer;  
  12. import org.jfree.data.category.CategoryDataset;  
  13. import org.jfree.data.category.DefaultCategoryDataset;  
  14. import org.jfree.ui.ApplicationFrame;  
  15. import org.jfree.ui.RefineryUtilities;  
  16.   
  17. /** 
  18. * This demonstration shows a 3D bar chart with item labels displayed. 
  19. * Source : http://www.koders.com/java/fid106C050FCFFD2D4A9174E48FA06ED1902C2D2E15.aspx 
  20. * @author John-Lee 
  21. */  
  22. public class BarChart3DDemo3 extends ApplicationFrame{  
  23.     /** 
  24.      * Creates a new demo. 
  25.      * 
  26.      * @param title  the frame title. 
  27.      */  
  28.     public BarChart3DDemo3(String title) {  
  29.         super(title);          
  30.         CategoryDataset dataset = createDataset();  
  31.         JFreeChart chart = createChart(dataset);  
  32.         ChartPanel chartPanel = new ChartPanel(chart);  
  33.         chartPanel.setPreferredSize(new java.awt.Dimension(500270));  
  34.         setContentPane(chartPanel);  
  35.     }  
  36.       
  37.     /** 
  38.      * Creates a sample dataset. 
  39.      * 
  40.      * @return a sample dataset. 
  41.      */  
  42.    private CategoryDataset createDataset() {  
  43.         DefaultCategoryDataset dataset = new DefaultCategoryDataset();  
  44.         dataset.addValue(25.0"Series 1""Category 1");     
  45.         dataset.addValue(34.0"Series 1""Category 2");     
  46.         dataset.addValue(19.0"Series 2""Category 1");     
  47.         dataset.addValue(29.0"Series 2""Category 2");     
  48.         dataset.addValue(41.0"Series 3""Category 1");     
  49.         dataset.addValue(33.0"Series 3""Category 2");     
  50.         return dataset;  
  51.     }  
  52.       
  53.     /** 
  54.      * Creates a chart. 
  55.      *  
  56.      * @param dataset  the dataset. 
  57.      *  
  58.      * @return The chart. 
  59.      */  
  60.     private JFreeChart createChart(CategoryDataset dataset) {          
  61.         JFreeChart chart = ChartFactory.createBarChart3D(  
  62.             "3D Bar Chart Demo",      // chart title  
  63.             "Category",               // domain axis label  
  64.             "Value",                  // range axis label  
  65.             dataset,                  // data  
  66.             PlotOrientation.VERTICAL, // orientation  
  67.             true,                     // include legend  
  68.             true,                     // tooltips  
  69.             false                     // urls  
  70.         );  
  71.   
  72.         CategoryPlot plot = chart.getCategoryPlot();  
  73.         // 設定 Label(Category1, Category2) 轉動角度 360度/8=45度  
  74.         CategoryAxis axis = plot.getDomainAxis();  
  75.         axis.setCategoryLabelPositions(  
  76.             CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 8.0)  
  77.         );  
  78.           
  79.         CategoryItemRenderer renderer = plot.getRenderer();  
  80.         renderer.setBaseItemLabelsVisible(true);  
  81.         BarRenderer r = (BarRenderer) renderer;  
  82.         r.setMaximumBarWidth(0.06); // 設定 Single Bar width 佔 所有 Space 的百分比  
  83.           
  84.         return chart;  
  85.     }  
  86.           
  87.     /** 
  88.      * Starting point for the demonstration application. 
  89.      * 
  90.      * @param args  ignored. 
  91.      */  
  92.     public static void main(String[] args) {  
  93.         BarChart3DDemo3 demo = new BarChart3DDemo3("3D Bar Chart Demo 3");  
  94.         demo.pack();  
  95.         RefineryUtilities.centerFrameOnScreen(demo);  
  96.         demo.setVisible(true);  
  97.     }  
  98. }  

執行結果 : 

沒有留言:

張貼留言

網誌存檔

關於我自己

我的相片
Where there is a will, there is a way!