种类: 柱形图(Bar Chart)比饼行图复杂,生成的图表数据需要有两个纬度。两个纬度从数据集的生成角度分,可以分按照类别
分为数据集(DefaultCategoryDataset)和XY分的数据集(XYDataset)两中。
下面简单介绍DefaultCategoryDataset方式生成柱形图(乱码问题忽略)。
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.setContentType("image/png");
CategoryDataset categoryDateset = createCategoryDataset();
JFreeChart jFreeChart = ChartFactory.createBarChart("",
"季度", "销量", categoryDateset, PlotOrientation.VERTICAL, true,
true, false);
jFreeChart.setTitle(new TextTitle("2012年图书销售统计",new Font("宋体",Font.BOLD,15)));
CategoryPlot categoryPlot = (CategoryPlot) jFreeChart.getPlot();
// 设置网格线可见
categoryPlot.setDomainGridlinesVisible(true);
// x轴
CategoryAxis categoryAxis = categoryPlot.getDomainAxis();
//设置倾斜角度
categoryAxis.setCategoryLabelPositions(CategoryLabelPositions
.createUpRotationLabelPositions(0.33f));
//设置边界距离
categoryAxis.setCategoryMargin(0.02D);
//获取图形对象
BarRenderer barRenderer = (BarRenderer) categoryPlot.getRenderer();
barRenderer.setDrawBarOutline(false);
ChartUtilities.writeChartAsPNG(resp.getOutputStream(), jFreeChart, 300, 250);
}private CategoryDataset createCategoryDataset() {
String[] quarter = new String[] { "第1季度", "第2季度", "第3季度", "第4季度" };
String[] language = new String[] { "java", "C++", ".net", "android",
"delphi" };
DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
for (String colCell : quarter) {
for (String rowCell : language) {
categoryDataset.setValue(DataUtils.getRandomNumber(), rowCell,
colCell);
}
}
return categoryDataset;
}@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doGet(req, resp);
}