`

使用JFreeChart小结(二)

阅读更多

前面刚整理了关于JFreeChart的基本使用:http://zhangzhenting.iteye.com/blog/619010

 

补充:生成立体柱状图(返回立体柱状图的JFreeChart对象)

代码如下,很多配置依然和前面相同,很多属性的配置可以参考前面的例子。

	public JFreeChart createBarChart3D(String title, String botTitle, String leftTitle, CategoryDataset data, boolean url) {
		// 创建栈堆型柱状图形
		JFreeChart chart = ChartFactory.createBarChart3D(title, botTitle, leftTitle, data, PlotOrientation.VERTICAL, true, true, url);
		CategoryPlot plot = chart.getCategoryPlot();

		StandardCategoryItemLabelGenerator scg = new StandardCategoryItemLabelGenerator(StandardCategoryItemLabelGenerator.DEFAULT_LABEL_FORMAT_STRING, new DecimalFormat("0"));

		BarRenderer3D renderer = new BarRenderer3D();
		renderer.setBaseOutlinePaint(Color.BLACK);
		// 设置每个地区所包含的平行柱的之间距离
		renderer.setItemMargin(0.1);
		// 显示每个柱的数值,并修改该数值的字体属性
		renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
		// 将每个柱的数值显示在柱顶
		renderer.setBasePositiveItemLabelPosition(new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT));
		renderer.setItemLabelAnchorOffset(10D);
		// 设置标签是否显示
		renderer.setBaseItemLabelsVisible(true);
		// 设置标签数字的显示位置
		renderer.setBaseItemLabelsVisible(true);
		// 设置超连接
		renderer.setBaseToolTipGenerator(new StandardCategoryToolTipGenerator());
		// 超连接可以扩展StandardCategoryURLGenerator对象的方法generateURL();
		renderer.setBaseItemURLGenerator(new StandardCategoryURLGenerator("aa.html"));
		// 设置柱型的间距
		renderer.setMaximumBarWidth(0.2);
		renderer.setBaseItemLabelGenerator(scg);

		plot.setRenderer(renderer);
		// 设置柱的透明度
		plot.setForegroundAlpha(0.9f);

		ValueAxis va = chart.getCategoryPlot().getRangeAxis();
		// 设置Y轴的最小值
		va.setLowerBound(0);

		return chart;
	}

 

不仅可以让轴数值进行一定角度的旋转,当柱图显示的数值太长时,为避免出现覆盖的情况,也可以对柱图上面的数值进行旋转,代码如下:

	public JFreeChart createBarChart(String title, CategoryDataset dataSet, String Xtitle, String Ytitle, boolean url) {
		// 创建拄图类型的图表对象
		JFreeChart chart = ChartFactory.createBarChart(title, Xtitle, Ytitle, dataSet, PlotOrientation.VERTICAL, true, false, url);

		StandardCategoryItemLabelGenerator scg = new StandardCategoryItemLabelGenerator(StandardCategoryItemLabelGenerator.DEFAULT_LABEL_FORMAT_STRING, new DecimalFormat("0"));

		// 显示的图例放到右边
		// chart.getLegend().setPosition(RectangleEdge.RIGHT);
		Font ticketLableFont = new Font("Arial", Font.PLAIN, 11);
		Font labelFont = new Font("Arial", Font.PLAIN, 12);

		CategoryPlot plot = chart.getCategoryPlot();
		plot.setDomainAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);

		// 设置详细图表的显示细节部分的背景颜色
		plot.setBackgroundPaint(new Color(255, 255, 204));
		// 设置是否显示水平网格线
		plot.setRangeGridlinesVisible(true);
		// 设置水平网格线颜色
		plot.setRangeGridlinePaint(Color.black);

		// 将所有数据转换为整数形式
		NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
		rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

		// 设置X轴标题的倾斜程度
		CategoryAxis domainAxis = plot.getDomainAxis();
		domainAxis.setLabelFont(labelFont);// 轴标题
		domainAxis.setTickLabelFont(ticketLableFont);// 轴数值
		domainAxis.setCategoryLabelPositions(CategoryLabelPositions.createUpRotationLabelPositions(Math.PI / 6.0));

		// 设置柱状体与图片边框的左右间距
		// domainAxis.setLowerMargin(0.01);
		// domainAxis.setUpperMargin(0.01);

		// 设置柱状体与图片边框的上下间距
		ValueAxis rAxis = plot.getRangeAxis();
		rAxis.setLabelFont(labelFont);
		rAxis.setTickLabelFont(ticketLableFont);
		rAxis.setUpperMargin(0.15);
		rAxis.setLowerMargin(0.15);

		BarRenderer barRenderer = new BarRenderer();
		// 设置每个柱的最大宽度
		barRenderer.setMaximumBarWidth(0.20);

		// 设置每一个柱状图都显示数值
		barRenderer.setBaseItemLabelGenerator(scg);
		barRenderer.setBaseItemLabelsVisible(true);

		ItemLabelPosition itemLabelPosition = new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT, TextAnchor.HALF_ASCENT_LEFT, -0.57D);
		barRenderer.setBasePositiveItemLabelPosition(itemLabelPosition);
		barRenderer.setBaseNegativeItemLabelPosition(itemLabelPosition);

		ItemLabelPosition itemLabelPositionFallback = new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BASELINE_LEFT, TextAnchor.HALF_ASCENT_LEFT, -0.57D);
		barRenderer.setPositiveItemLabelPositionFallback(itemLabelPositionFallback);
		barRenderer.setNegativeItemLabelPositionFallback(itemLabelPositionFallback);
		plot.setRenderer(0, barRenderer);

		// 设置是否在柱图的状态条上显示边框
		CategoryItemRenderer renderer = (CategoryItemRenderer) plot.getRenderer();
		BarRenderer render = (BarRenderer) plot.getRenderer();
		render.setItemMargin(0.0);
		render.setBaseItemLabelFont(new Font("Arial Narrow", Font.TRUETYPE_FONT, 10));

		// 设置没个柱状的颜色
		renderer.setSeriesPaint(0, new Color(128, 128, 192));
		renderer.setSeriesPaint(1, new Color(128, 0, 64));
		renderer.setSeriesPaint(2, new Color(128, 128, 0));

		return chart;
	}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics