前面刚整理了关于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;
}