直接生成3D柱状图:
public class Report { public static void main(String[] args) { // 创建一个柱状图 DefaultCategoryDataset dataset = new DefaultCategoryDataset(); // 装载数据 dataset.setValue(6, "Profit", "Jane"); dataset.setValue(3, "Profit2", "Jane"); dataset.setValue(7, "Profit", "Tom"); dataset.setValue(6, "Profit2", "Tom"); dataset.setValue(8, "Profit", "Jill"); dataset.setValue(9, "Profit2", "Jill"); dataset.setValue(5, "Profit", "John"); dataset.setValue(8, "Profit2", "John"); dataset.setValue(12, "Profit", "Fred"); dataset.setValue(11, "Profit2", "Fred"); // 产生柱状图 // JFreeChart chart = // ChartFactory.createXYLineChart("标题","x轴标志","y轴标志","设置数据" // ,"设置图形显示方向",是否显示图形,是否进行提示,是否配置报表存放地址); // 图形显示方向: // (1)HORIZONTAL:横向显示图形 // (2)VERTICAL:纵向显示图形 // 3D柱状图 JFreeChart chart = ChartFactory.createBarChart3D("销售统计图", "Salesman", "Profit", dataset, PlotOrientation.VERTICAL, true, true, false); try { // // 创建图形显示面板 // ChartFrame cf = new ChartFrame("柱状图",chart); // cf.pack(); // // 设置图片大小 // cf.setSize(500,300); // // 设置图形可见 // cf.setVisible(true); // 保存图片到指定文件夹 ChartUtilities.saveChartAsJPEG(new File("C:\\BarChart.jpg"), chart, 500, 300); } catch (Exception e) { System.err.println("Problem occurred creating chart."); } } }
public class JFreeReport { Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver"); Connection conn = DriverManager .getConnection("jdbc:microsoft:sqlserver://localhost:1433;User=sa;Password=;DatabaseName=library"); Statement stmt = conn.createStatement(); ResultSet rs = stmt .executeQuery("select bookType, bookCount=count(*) from books group by bookType"); //第2步,从ResultSet得到CategoryDataset DefaultCategoryDataset dataset = new DefaultCategoryDataset(); while (rs.next()) { String bookType = rs.getString("bookType"); int bookCount = rs.getInt("bookCount"); //这个例子并不够好,因为这里所有的数据共享了同一个维:“Count”。 //所以它实际上只是一个一维表:以bookType为维,以bookCount为值 //Count维其实并没有起到任何作用 //文档《使用 JFreeChart来创建基于web的图表》中的直方图才是二维表的好例子 dataset.setValue(bookCount, "Count", bookType); } /* JfreeChart也提供了直接从Datasource/Connection 中获得Dataset的JDBCDataset,在本例中可以改用这个类 */ //第3步,从Dateset中创建Chart JFreeChart chart = ChartFactory.createBarChart("各种类别的书籍的册数", "类别", "册数", dataset, PlotOrientation.VERTICAL, true, true, false); //最后一步,导出图片到WEB ChartUtilities.writeChartAsJPEG(response.getOutputStream(), chart, 640, 370); //640和370分别代表Chart的宽度和高度 //其实可以根据ResultSet的行数来确定它的宽度 //根据数据的最大值来确定它的高度 //如果把Chart 放到报表中,就会失去这个灵活性 }