• JFreeChart入门


    JFreeChart主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等

    (源代码下载)

    示例程序运用的jar包:

    • jcommon-1.0.17.jar
    • jfreechart-1.0.14.jar

    1:普通柱状图

    这是程序调用CategoryDataset dataset = getDataSet2(); 后所生产的图片

    image

    BarChartDemo.java柱状图代码

      1 /**
      2 * 该类用于演示最简单的柱状图生成
      3 * @author Winter Lau
      4 */
      5 public class BarChartDemo {
      6     public static void main(String[] args) throws IOException{
      7 
      8         CategoryDataset dataset = getDataSet2();
      9         JFreeChart chart = ChartFactory.createBarChart3D(
     10                            "水果产量图", // 图表标题
     11                            "水果", // 目录轴的显示标签
     12                            "产量", // 数值轴的显示标签
     13                             dataset, // 数据集
     14                             PlotOrientation.VERTICAL, // 图表方向:水平、垂直
     15                             true,  // 是否显示图例(对于简单的柱状图必须是 false)
     16                             false, // 是否生成工具
     17                             false  // 是否生成 URL 链接
     18                             );
     19         //中文乱码
     20         CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
     21         NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
     22         CategoryAxis domainAxis = categoryplot.getDomainAxis();
     23         TextTitle textTitle = chart.getTitle();
     24         textTitle.setFont(new Font("黑体", Font.PLAIN, 20));
     25         domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
     26         domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
     27         numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));
     28         numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));
     29         chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
     30 
     31         FileOutputStream fos_jpg = null;
     32         try {
     33             fos_jpg = new FileOutputStream("D:\BarChart.jpg");
     34             ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f,chart,400,300,null);
     35         } finally {
     36             try {
     37                 fos_jpg.close();
     38             } catch (Exception e) {}
     39         }
     40     }
     41     /**
     42     * 获取一个演示用的简单数据集对象
     43     * @return
     44     */
     45     private static CategoryDataset getDataSet() {
     46         DefaultCategoryDataset dataset = new DefaultCategoryDataset();
     47         dataset.addValue(100, "", "苹果");
     48         dataset.addValue(200, "", "梨子");
     49         dataset.addValue(300, "", "葡萄");
     50         dataset.addValue(400, "", "香蕉");
     51         dataset.addValue(500, "", "荔枝");
     52         return dataset;
     53     }
     54     /**
     55     * 获取一个演示用的组合数据集对象
     56     * @return
     57     */
     58     private static CategoryDataset getDataSet2() {
     59         DefaultCategoryDataset dataset = new DefaultCategoryDataset();
     60         dataset.addValue(100, "北京", "苹果");
     61         dataset.addValue(100, "上海", "苹果");
     62         dataset.addValue(100, "广州", "苹果");
     63         dataset.addValue(200, "北京", "梨子");
     64         dataset.addValue(200, "上海", "梨子");
     65         dataset.addValue(200, "广州", "梨子");
     66         dataset.addValue(300, "北京", "葡萄");
     67         dataset.addValue(300, "上海", "葡萄");
     68         dataset.addValue(300, "广州", "葡萄");
     69         dataset.addValue(400, "北京", "香蕉");
     70         dataset.addValue(400, "上海", "香蕉");
     71         dataset.addValue(400, "广州", "香蕉");
     72         dataset.addValue(500, "北京", "荔枝");
     73         dataset.addValue(500, "上海", "荔枝");
     74         dataset.addValue(500, "广州", "荔枝");
     75         return dataset;
     76     }
     77 }

    2:饼状图

    image

    PieChartDemo.java饼状图源代码

      1 /**
      2  * 用于演示饼图的生成
      3  */
      4 public class PieChartDemo {
      5     public static void main(String[] args) throws IOException {
      6         DefaultPieDataset data = getDataSet();
      7         JFreeChart chart = ChartFactory.createPieChart3D("水果产量图", // 图表标题
      8                 data, // 数据集
      9                 true, // 是否显示图例(对于简单的柱状图必须是 false)
     10                 false, // 是否生成工具
     11                 false // 是否生成 URL 链接
     12                 );
     13 
     14         //中文乱码
     15         PiePlot3D plot = (PiePlot3D) chart.getPlot();
     16         plot.setLabelFont(new Font("黑体", Font.PLAIN, 20));
     17         TextTitle textTitle = chart.getTitle();
     18         textTitle.setFont(new Font("黑体", Font.PLAIN, 20));
     19         chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
     20 
     21         // 写图表对象到文件,参照柱状图生成源码
     22         FileOutputStream fos_jpg = null;
     23         try {
     24             fos_jpg = new FileOutputStream("D:\Pie3DChart.jpg");
     25             ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f, chart, 400, 300,
     26                     null);
     27         } finally {
     28             try {
     29                 fos_jpg.close();
     30             } catch (Exception e) {
     31             }
     32         }
     33     }
     34 
     35     /**
     36      * 获取一个演示用的简单数据集对象
     37      *
     38      * @return
     39      */
     40     private static DefaultPieDataset getDataSet() {
     41         DefaultPieDataset dataset = new DefaultPieDataset();
     42         dataset.setValue("苹果", 100);
     43         dataset.setValue("梨子", 200);
     44         dataset.setValue("葡萄", 300);
     45         dataset.setValue("香蕉", 400);
     46         dataset.setValue("荔枝", 500);
     47         return dataset;
     48     }
     49 }

    其他的图表类型暂时不写了,其实写法也差不多。这里注意两种图形的中文乱码解决方法是不一样的,具体查看源代码中的红色部分

    3:将数据库的内容用图形表示出来

    image

    index.jsp

      1 <body>
      2     <form action="servlet/ShowChartServlet" method="get" >
      3       <input type="submit" value="jfreechart访问数据库生成图表">
      4     </form>
      5   </body>

    showJfreeChart.jsp

      1 <body>
      2     <center>
      3     <img alt="" src="<%=path %>/reports/productSales.jpg">
      4     </center>
      5   </body>

    ShowChartServlet.java

      1 public class ShowChartServlet extends HttpServlet {
      2 
      3     /**
      4      * 获取一个演示用的组合数据集对象
      5      *
      6      * @return
      7      */
      8     private static CategoryDataset getDataSet() {
      9         DefaultCategoryDataset dataset = new DefaultCategoryDataset();
     10         // 从数据库中获取
     11         Connection conn = null;
     12         PreparedStatement ps = null;
     13         ResultSet rs = null;
     14         try {
     15             Class.forName("com.mysql.jdbc.Driver"); // 加载驱动程序
     16             conn = DriverManager
     17                     .getConnection(
     18                             "jdbc:mysql://localhost:3306/shopping?useUnicode=true&amp;characterEncoding=utf8",
     19                             "root", "root");
     20             ps = conn.prepareStatement("select p.name, count(pcount) from product p join salesitem si on (p.id = si.productid) group by p.id");
     21             rs = ps.executeQuery();
     22             while (rs.next()) {
     23                 dataset.addValue(rs.getInt(2), "", rs.getString(1));
     24             }
     25             rs.close();
     26             rs = null;
     27         } catch (SQLException e) {
     28             e.printStackTrace();
     29         }catch (ClassNotFoundException e) {
     30             e.printStackTrace();
     31         }
     32         finally {
     33             if(ps != null){
     34                 try {
     35                     ps.close();
     36                 } catch (SQLException e) {
     37                     e.printStackTrace();
     38                 }
     39             }
     40             if(conn != null){
     41                 try {
     42                     conn.close();
     43                 } catch (SQLException e) {
     44                     e.printStackTrace();
     45                 }
     46             }
     47 
     48         }
     49 
     50         return dataset;
     51     }
     52 
     53     public void doGet(HttpServletRequest request, HttpServletResponse response)
     54             throws ServletException, IOException {
     55 
     56         CategoryDataset dataset = getDataSet();
     57         JFreeChart chart = ChartFactory.createBarChart3D(
     58                            "产品销量图", // 图表标题
     59                            "产品", // 目录轴的显示标签
     60                            "销量", // 数值轴的显示标签
     61                             dataset, // 数据集
     62                             PlotOrientation.VERTICAL, // 图表方向:水平、垂直
     63                             true,  // 是否显示图例(对于简单的柱状图必须是 false)
     64                             false, // 是否生成工具
     65                             false  // 是否生成 URL 链接
     66                             );
     67         //中文乱码
     68         CategoryPlot categoryplot = (CategoryPlot) chart.getPlot();
     69         NumberAxis numberaxis = (NumberAxis) categoryplot.getRangeAxis();
     70         CategoryAxis domainAxis = categoryplot.getDomainAxis();
     71         TextTitle textTitle = chart.getTitle();
     72         textTitle.setFont(new Font("黑体", Font.PLAIN, 20));
     73         domainAxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 11));
     74         domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
     75         numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));
     76         numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));
     77         chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
     78 
     79         FileOutputStream fos_jpg = null;
     80         try {
     81             fos_jpg = new FileOutputStream("E:\Workspaces\MyEclipse 9\WebProjects\JFreeChart\WebRoot\reports\productSales.jpg");
     82             ChartUtilities.writeChartAsJPEG(fos_jpg, 1.0f,chart,400,300,null);
     83              String path = this.getServletContext().getContextPath();
     84              System.out.println(path+"mmmmmmmmmmm");
     85             this.getServletContext().getRequestDispatcher("/showJfreeChart.jsp").forward(request, response);
     86         } finally {
     87             try {
     88                 fos_jpg.close();
     89             } catch (Exception e) {}
     90         }
     91     }
     92 
     93 }

    注:本文来源于:cnblogs:牛奶、不加糖

  • 相关阅读:
    【C语言篇】☞ 2. 常量、变量、scanf函数和printf 函数
    【C语言篇】☞ 1. 前言、基础
    React快速入门教程
    数论-欧拉函数
    数论-约数
    数论-质数专题
    匈牙利算法求二分图的最大匹配数
    染色法判断二分图
    Kruskal算法
    Prim算法
  • 原文地址:https://www.cnblogs.com/ios9/p/7475910.html
Copyright © 2020-2023  润新知