柱形图

使用JFreeChart生成柱状图需要使用CategoryDataset作为统计图表的数据载体,生成柱状图后依然可以使用JFreeChart来设置统计图表的标题和图例格式。要实现设置柱状图的实际图表,同样要调用JFreeChart的getPlot方法来取得实际图表实例。

下面是一个生成简单柱状图的实例,该实例需要jfreechart-1.0.13.jar和jcommon-1.0.16.jar两个JAR包的支持。

 

BarChart3DDemo.java代码

  
  1. package jfreechat;  
  2.  
  3. import java.awt.Font;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6.  
  7. import org.jfree.chart.ChartFactory;  
  8. import org.jfree.chart.ChartUtilities;  
  9. import org.jfree.chart.JFreeChart;  
  10. import org.jfree.chart.axis.CategoryAxis;  
  11. import org.jfree.chart.axis.CategoryLabelPositions;  
  12. import org.jfree.chart.axis.NumberAxis;  
  13. import org.jfree.chart.plot.CategoryPlot;  
  14. import org.jfree.chart.plot.PlotOrientation;  
  15. import org.jfree.chart.title.TextTitle;  
  16. import org.jfree.data.category.CategoryDataset;  
  17. import org.jfree.data.category.DefaultCategoryDataset;  
  18.  
  19. public class BarChart3DDemo {  
  20.     /**  
  21.      * @param args  
  22.      * @author xuliang  
  23.      * @date 2010-3-17 10:29:58   
  24.      */ 
  25.     private static CategoryDataset getDataset(){  
  26.         DefaultCategoryDataset dataset = new DefaultCategoryDataset();  
  27.         dataset.addValue(4.0"""2010-02-01");  
  28.         dataset.addValue(4.4"""2010-02-04");  
  29.         dataset.addValue(4.2"""2010-02-05");  
  30.         dataset.addValue(4.1"""2010-02-08");  
  31.         dataset.addValue(4.0"""2010-02-11");  
  32.         dataset.addValue(4.1"""2010-02-12");  
  33.         dataset.addValue(3.9"""2010-02-19");  
  34.         dataset.addValue(4.0"""2010-02-22");  
  35.         dataset.addValue(6.1"""2010-02-25");  
  36.         dataset.addValue(4.9"""2010-02-26");  
  37.         dataset.addValue(4.4"""2010-03-01");  
  38.         dataset.addValue(4.3"""2010-03-05");  
  39.         dataset.addValue(4.4"""2010-03-08");  
  40.         dataset.addValue(5.6"""2010-03-11");  
  41.         dataset.addValue(5.9"""2010-03-12");  
  42.         dataset.addValue(4.1"""2010-03-15");  
  43.         return dataset;  
  44.     }  
  45.       
  46.     public static void main(String[] args) throws IOException {  
  47.         JFreeChart chart = ChartFactory.createBarChart3D(  
  48.             "MRP Run Time",             //图表标题  
  49.             "日期",                   //X轴标签  
  50.             "MRP单次运行总耗时",       //Y轴标签  
  51.             getDataset(),               //数据集合  
  52.             //PlotOrientation.HORIZONTAL,   //图表方向:水平  
  53.             PlotOrientation.VERTICAL,   //图表方向:垂直  
  54.             false,                      //是否显示图例  
  55.             false,                      //是否生成工具  
  56.             false                       //是否生成URL链接  
  57.         );  
  58.           
  59.         //重新设置图表标题,改变字体样式  
  60.         chart.setTitle(new TextTitle("MRP Run Time",new Font("黑体", Font.ITALIC, 22)));  
  61.         CategoryPlot plot = (CategoryPlot) chart.getPlot();  
  62.           
  63.         //取得X轴  
  64.         CategoryAxis categoryAxis = plot.getDomainAxis();  
  65.         categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 20));  
  66.         //设置分类标签倾斜45¡ã  
  67.         categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);  
  68.         categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 18));  
  69.           
  70.         //取得Y轴  
  71.         NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();  
  72.         numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 20));  
  73.           
  74.         //输出到图片文件  
  75.         FileOutputStream fos = null;  
  76.         fos = new FileOutputStream("D:\\MRPTime.jpg");  
  77.           
  78.         ChartUtilities.writeChartAsJPEG(  
  79.             fos,    //文件流  
  80.             1,      //图片质量,0到1之间  
  81.             chart,  //统计图表对象  
  82.             800,    //图片宽度  
  83.             600,    //图片高度  
  84.             null    //图片信息  
  85.         );  
  86.           
  87.         fos.close();  
  88.     }  
  89. }  

在上面的代码中,为了修改柱状图坐标轴的显示格式,使用了两个XXXAxis实例,其中CategoryAxis代表柱状图的横轴,NumberAxis则代表柱状图的纵轴。

对于有坐标轴的统计图表而言,分别调用CategoryPlot的如下两个方法,即可取得柱状图的横轴和纵轴。

  • getDomainAxis:返回柱状图的横轴。
  • getRangeAxis:返回柱状图的纵轴。

一旦获得了柱状图的两个坐标轴之后,就可以任意修改坐标轴上的输出格式。

 
  1. package jfreechat;  
  2.  
  3. import java.awt.Font;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6.  
  7. import org.jfree.chart.ChartFactory;  
  8. import org.jfree.chart.ChartUtilities;  
  9. import org.jfree.chart.JFreeChart;  
  10. import org.jfree.chart.axis.CategoryAxis;  
  11. import org.jfree.chart.axis.CategoryLabelPositions;  
  12. import org.jfree.chart.axis.NumberAxis;  
  13. import org.jfree.chart.plot.CategoryPlot;  
  14. import org.jfree.chart.plot.PlotOrientation;  
  15. import org.jfree.chart.title.LegendTitle;  
  16. import org.jfree.chart.title.TextTitle;  
  17. import org.jfree.data.category.CategoryDataset;  
  18. import org.jfree.data.category.DefaultCategoryDataset;  
  19.  
  20. public class BarChartbook {  
  21.     /**  
  22.      * @param args  
  23.      * @author xuliang  
  24.      * @date 2010-3-17 22:29:43  
  25.      */ 
  26.     //返回一个CategoryDataset实例  
  27.     private static CategoryDataset getDataset(){  
  28.         //创建DefaultCategoryDataset实例  
  29.         DefaultCategoryDataset dataset = new DefaultCategoryDataset();  
  30.         dataset.addValue(45000"深圳""JavaScript高级程序设计");  
  31.         dataset.addValue(38000"深圳""Java编程思想");  
  32.         dataset.addValue(24000"深圳""锋利的jQuery");  
  33.         dataset.addValue(32000"深圳""SAP高级应用开发");  
  34.         dataset.addValue(21000"深圳""精通Hibernate");  
  35.         dataset.addValue(37000"武汉""JavaScript高级程序设计");  
  36.         dataset.addValue(36000"武汉""Java编程思想");  
  37.         dataset.addValue(34000"武汉""锋利的jQuery");  
  38.         dataset.addValue(42000"武汉""SAP高级应用开发");  
  39.         dataset.addValue(12000"武汉""精通Hibernate");  
  40.         dataset.addValue(42000"北京""JavaScript高级程序设计");  
  41.         dataset.addValue(40000"北京""Java编程思想");  
  42.         dataset.addValue(34000"北京""锋利的jQuery");  
  43.         dataset.addValue(18000"北京""SAP高级应用开发");  
  44.         dataset.addValue(26000"北京""精通Hibernate");  
  45.         return dataset;  
  46.     }  
  47.       
  48.     public static void main(String[] args) throws IOException {   
  49.         JFreeChart chart = ChartFactory.createBarChart(  
  50.             "图书销量统计图",  //图表标题  
  51.             "书名",               //X轴书签  
  52.             "图书销量(册)",  //Y轴书签  
  53.             getDataset(),       //数据集  
  54.             PlotOrientation.VERTICAL,   //图表方向:垂直  
  55.             true,               //是否显示图例  
  56.             false,              //是否生成工具  
  57.             false               //是否生成URL链接  
  58.         );  
  59.           
  60.         //重新设置图表标题,改变字体样式  
  61.         chart.setTitle(new TextTitle(  
  62.                 "图书销量统计图",  
  63.                 new Font("黑体", Font.ITALIC, 22))  
  64.         );  
  65.         //取得图表的第一个实例  
  66.         LegendTitle legend = chart.getLegend(0);  
  67.         //修改图例的字体  
  68.         legend.setItemFont(new Font("宋体", Font.BOLD, 14));  
  69.           
  70.         CategoryPlot plot = (CategoryPlot) chart.getPlot();  
  71.         //取得横轴  
  72.         CategoryAxis axis = plot.getDomainAxis();  
  73.         axis.setLabelFont(new Font("宋体", Font.BOLD, 22));  
  74.         axis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);  
  75.         axis.setTickLabelFont(new Font("宋体", Font.BOLD, 18));  
  76.           
  77.         //取得纵轴  
  78.         NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();  
  79.         numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 22));  
  80.           
  81.         //输出文件  
  82.         FileOutputStream fos = null;  
  83.         fos = new FileOutputStream("D:\\BookSales.jpg");  
  84.         ChartUtilities.writeChartAsJPEG(  
  85.             fos,    //文件流  
  86.             1,      //图片质量,1到0之间  
  87.             chart,  //统计图表对象  
  88.             800,    //宽度  
  89.             600,    //高度  
  90.             null    //图片信息  
  91.         );  
  92.           
  93.         fos.close();  
  94.     }  

在此例中,创建CategoryDataset实例时调用了addValue方法,调用时传入了三个参数,其中第二个参数时一组数据的key,即在数据集中,数据按照“深圳”、“武汉”、“北京”三个地方进行了分类。

 

 

 

 

以上转自http://www.sunchis.com/html/java/javareport/2010/0317/81.html  若此链接还有效的话 请大家进入查看 !

你可能感兴趣的:(JavaScript,jquery,编程,Hibernate,jfreechart)