分享

JFreeChart中柱状图的详细设置

 WindySky 2009-01-14
26

JFreeChart中柱状图的详细设置

柱状图: bar charts (regular and stacked, with an optional 3D effect),用到的主要类如下:

 org.jfree.chart.JFreeChart:图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象

 org.jfree.data.category.CategoryDataset:数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类

 org.jfree.chart.plot.CategoryPlot:图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对象的支持

 org.jfree.chart.axis.CategoryAxis:用于处理图表的两个轴:纵轴和横轴

 org.jfree.chart.render.CategoryRender:负责如何显示一个图表对象

 org.jfree.chart.urls.CategoryURLGenerator:用于生成Web图表中每个项目的鼠标点击链接

 CategoryToolTipGenerator:用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类

 org.jfree.chart.axis.ValueAxis:用于处理图表中的柱

 

Java代码 复制代码
  1. /**  
  2.  
  3. * 类库  
  4.  
  5. * 1、jfreechart-1.0.5.jar、jcommon-1.0.9.jar、gnujaxp.jar  
  6. * 2、jbcl.jar、dx.jar、beandt.jar 由JBuilder2006的lib下提供  
  7.  
  8. */  
  9.   
  10. package org.jfree.demo;   
  11.   
  12. import java.io.*;   
  13.   
  14. import org.jfree.data.*;   
  15.   
  16. import org.jfree.chart.*;   
  17.   
  18. import org.jfree.chart.plot.*;   
  19.   
  20. import org.jfree.data.category.*;   
  21.   
  22. import java.awt.Color;   
  23.   
  24. import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;   
  25.   
  26. import java.awt.Font;   
  27.   
  28. import org.jfree.chart.axis.AxisLocation;   
  29.   
  30. import java.awt.event.WindowAdapter;   
  31.   
  32. import java.awt.event.WindowEvent;   
  33.   
  34. import java.awt.Toolkit;   
  35.   
  36. import java.awt.Dimension;   
  37.   
  38. /**  
  39.  
  40. * <p>Title: Java开发手册</p>  
  41.  
  42. *  
  43.  
  44. * <p>Description: 适合中高级使用者</p>  
  45.  
  46. *  
  47.  
  48. * <p>Copyright: Copyright (c) 2007</p>  
  49.  
  50. *  
  51.  
  52. * <p>Company: lingbrother</p>  
  53.  
  54. *  
  55.  
  56. * @author lingbrother  
  57.  
  58. * @version 1.0  
  59.  
  60. */  
  61.   
  62. public class BarChartDemo {   
  63.   
  64.   public BarChartDemo() {   
  65.   
  66.     super();   
  67.   
  68.   }   
  69.   
  70.   
  71.   
  72.   public static void main(String[] args) throws IOException{   
  73.   
  74.           CategoryDataset dataset = getDataSet();   
  75.   
  76.           JFreeChart chart = ChartFactory.createBarChart3D(   
  77.   
  78.                                                   "招生信息总览"// 图表标题   
  79.   
  80.                                                   "应报与实报对照"// 目录轴的显示标签   
  81.   
  82.                                                   "人数"// 数值轴的显示标签   
  83.   
  84.                                                   dataset, // 数据集   
  85.   
  86.                                                   PlotOrientation.VERTICAL, // 图表方向:水平、垂直   
  87.   
  88.                                                   true,  // 是否显示图例(对于简单的柱状图必须是false)   
  89.   
  90.                                                   true,  // 是否生成工具   
  91.   
  92.                                                   true  // 是否生成URL链接   
  93.   
  94.                                                   );   
  95.   
  96.           CategoryPlot plot = chart.getCategoryPlot();//获得图表区域对象   
  97.   
  98.           //设置图表的纵轴和横轴org.jfree.chart.axis.CategoryAxis   
  99.   
  100.           org.jfree.chart.axis.CategoryAxis domainAxis = plot.getDomainAxis();   
  101.   
  102.           domainAxis.setLowerMargin(0.1);//设置距离图片左端距离此时为10%   
  103.   
  104.           domainAxis.setUpperMargin(0.1);//设置距离图片右端距离此时为百分之10   
  105.   
  106.           domainAxis.setCategoryLabelPositionOffset(10);//图表横轴与标签的距离(10像素)   
  107.   
  108.           domainAxis.setCategoryMargin(0.2);//横轴标签之间的距离20%   
  109.   
  110.           //domainAxis.setMaximumCategoryLabelLines(1);   
  111.   
  112.           //domainAxis.setMaximumCategoryLabelWidthRatio(0);   
  113.   
  114.   
  115.   
  116.           //设定柱子的属性   
  117.   
  118.           org.jfree.chart.axis.ValueAxis rangeAxis = plot.getRangeAxis();   
  119.   
  120.           rangeAxis.setUpperMargin(0.1);//设置最高的一个柱与图片顶端的距离(最高柱的10%)   
  121.   
  122.   
  123.   
  124.           //设置图表的颜色   
  125.   
  126.           org.jfree.chart.renderer.category.BarRenderer3D renderer;   
  127.   
  128.           renderer = new org.jfree.chart.renderer.category.BarRenderer3D();   
  129.   
  130.           renderer.setBaseOutlinePaint(Color.red);   
  131.   
  132.           renderer.setSeriesPaint(0new Color(0255255));//计划柱子的颜色为青色   
  133.   
  134.           renderer.setSeriesOutlinePaint(0,Color.BLACK);//边框为黑色   
  135.   
  136.           renderer.setSeriesPaint(1new Color(02550));//实报柱子的颜色为绿色   
  137.   
  138.           renderer.setSeriesOutlinePaint(1,Color.red);//边框为红色   
  139.   
  140.           renderer.setItemMargin(0.1);//组内柱子间隔为组宽的10%   
  141.   
  142.           //显示每个柱的数值,并修改该数值的字体属性   
  143.   
  144.           renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());   
  145.   
  146.           renderer.setItemLabelFont(new Font("黑体",Font.BOLD,12));//12号黑体加粗   
  147.   
  148.           renderer.setItemLabelPaint(Color.black);//字体为黑色   
  149.   
  150.           renderer.setItemLabelsVisible(true);   
  151.   
  152.           plot.setRenderer(renderer);//使用我们设计的效果   
  153.   
  154.   
  155.   
  156.           //设置纵横坐标的显示位置   
  157.   
  158.           plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_LEFT);//学校显示在下端(柱子竖直)或左侧(柱子水平)   
  159.   
  160.           plot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_LEFT); //人数显示在下端(柱子水平)或左侧(柱子竖直)   
  161.   
  162.   
  163.   
  164.           try {   
  165.   
  166.             File file = new File("c:/student.png");   
  167.   
  168.             ChartUtilities.saveChartAsPNG(file,chart,400,300);//把报表保存为文件   
  169.   
  170.           }catch (Exception e) {   
  171.   
  172.                     String s = e.getLocalizedMessage();   
  173.   
  174.                     s = e.getMessage();   
  175.   
  176.                     s = e.toString();   
  177.   
  178.           }   
  179.   
  180.       //将生成的报表放到预览窗口中   
  181.   
  182.       final ChartFrame preview = new ChartFrame("招生信息",chart);   
  183.   
  184.        preview.addWindowListener(new WindowAdapter() {   
  185.   
  186.          public void windowClosing(final WindowEvent event) {   
  187.   
  188.            preview.dispose();   
  189.   
  190.          }   
  191.   
  192.        });   
  193.   
  194.        preview.pack();   
  195.   
  196.        //调整预览窗口的大小和位置,适合屏幕,并且居中   
  197.   
  198.        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();   
  199.   
  200.        preview.setSize(screenSize.width,screenSize.height-50);//适合屏幕,50表示把工具栏要考虑在内   
  201.   
  202.        Dimension frameSize = preview.getSize();   
  203.   
  204.        if (frameSize.height > screenSize.height) {   
  205.   
  206.          frameSize.height = screenSize.height;   
  207.   
  208.        }   
  209.   
  210.        if (frameSize.width > screenSize.width) {   
  211.   
  212.          frameSize.width = screenSize.width;   
  213.   
  214.        }   
  215.   
  216.        preview.setLocation( (screenSize.width - frameSize.width) / 2,   
  217.   
  218.                   (screenSize.height - frameSize.height-50) / 2);   
  219.   
  220.   
  221.   
  222.        //显示报表预览窗口   
  223.   
  224.        preview.setVisible(true);   
  225.   
  226.   }   
  227.   
  228.   /**  
  229.  
  230.    * 获取一个演示用的组合数据集对象  
  231.  
  232.    * @return  
  233.  
  234.    */  
  235.   
  236.   private static CategoryDataset getDataSet() {   
  237.   
  238.           DefaultCategoryDataset dataset = new DefaultCategoryDataset();   
  239.   
  240.           dataset.addValue(200"计划""清华大学");   
  241.   
  242.           dataset.addValue(400"实报""清华大学");   
  243.   
  244.           dataset.addValue(100"计划""天津大学");   
  245.   
  246.           dataset.addValue(205"实报""天津大学");   
  247.   
  248.           dataset.addValue(200"计划""郑州大学");   
  249.   
  250.           dataset.addValue(285"实报""郑州大学");   
  251.   
  252.           return dataset;   
  253.   
  254.   }   
  255.   
  256. }   

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约