Struts2结合Jfreechart实现数据报表统计(四)

2014-11-24 07:14:44 · 作者: · 浏览: 1
//设置标题字体样式 chart.getTitle().setFont(new Font("黑体", Font.ITALIC,22)); //取得横轴和设置横轴样式 CategoryAxis categoryAxis = plot.getDomainAxis(); categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 22)); //横轴分类标签 categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD); categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 22)); //取得纵轴和设置纵轴样式 NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis(); numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 22)); //显示每个柱的数值,并修改该数值的字体属性 BarRenderer3D renderer = new BarRenderer3D(); renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setBaseItemLabelsVisible(true); //默认的数字显示在柱子中,通过如下两句可调整数字的显示 //注意:此句很关键,若无此句,那数字的显示会被覆盖,给人数字没有显示出来的问题 ,将数字显示在柱状图上面 renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition( ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT)); renderer.setItemLabelAnchorOffset(10D); //设置每个地区所包含的平行柱的之间距离 //renderer.setItemMargin(0.3); plot.setRenderer(renderer); }


创建带有多个数据的柱状图:

\

不同的地方主要是数据提供不一样:在dataset.addValue()中第二个参数部位""或null就行了,我们也可以使用数组的方式提供:

	/**
	 * 创建柱状图数据的第二种方式
	 * @return
	 */
	private static CategoryDataset createBarDataSet2(){
		double[][] data = new double[][] {{1310, 1220, 1110, 1000},{720, 700, 680, 640},{1130, 1020, 980, 800},{440, 400, 360, 300}};
		String[] rowKeys = { "pig", "beef", "chicken", "fish" };
		String[] columnKeys = { "Guangzhou", "Shenzhen", "Dongguan", "Foshan" };
		CategoryDataset dataset = DatasetUtilities.createCategoryDataset(rowKeys, columnKeys, data);
		return dataset;
	}


3)创建折线图:

\

	
	/**
	 * 创建折线图
	 * @param title
	 * @param XLabel
	 * @param YLabel
	 * @return
	 */
	public static JFreeChart createLineChart(String title,String XLabel,String YLabel) {
		//该数据的Demo由系统提供,故不传入相应的Map或List数据了
		DefaultCategoryDataset dataset=createLineDataset();
		// 定义图表对象(折线图名称,横坐标名称,纵坐标名称,数据, 水平显示图像)
		JFreeChart chart = ChartFactory.createLineChart(title,XLabel,YLabel,dataset,PlotOrientation.VERTICAL,true,true,false);
		setLineStyle(chart);
		return chart;
	}

	/**
	 * 生成折线图数据
	 * @return
	 */
	private static DefaultCategoryDataset createLineDataset() {
	    DefaultCategoryDataset linedataset = new DefaultCategoryDataset();
	    // 各曲线名称
	    String series1 = "冰箱";
	    String series2 = "彩电";
	    String series3 = "洗衣机";
	    // 横轴名称(列名称)
	    String type1 = "1月";
	    String type2 = "2月";
	    String type3 = "3月";
	    linedataset.addValue(0.0, series1, type1);
	    linedataset.addValue(4.2, series1, type2);
	    linedataset.addValue(3.9, series1, type3);
	    linedataset.addValue(1.0, series2, type1);
	    linedataset.addValue(5.2, series2, type2);
	    linedataset.addValue(7.9, series2, type3);
	    linedataset.addValue(2.0, series3, type1);
	    linedataset.addValue(9.2, series3, type2);
	    linedataset.addValue(8.9, series3, type3);
	    return linedataset;
	}

	/**
	 * 设置折线图样式
	 * 
	 * @param chart
	 */
	private static void setLineStyle(JFreeChart chart){
		CategoryPlot plot = chart.getCategoryPlot();
		//设置标题字体样式
		chart.getTitle().setFont(new Font("黑体", Font.ITALIC,22));
		//取得横轴和设置横轴样式
		CategoryAxis categoryAxis = plot.getDomainAxis();
		categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 22));
		//横轴分类标签
		categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD);
		cat