jfreechart 画柱状图.(二维实例参照)
这一次直接调用方法输出,初学着想知道SSM框架怎么调用可参考上篇博文
jfreechart 画饼图.(二维和3D实例参照)
部分代码参考百度,如侵权致歉,通知删除
package com.zttech.demo.controller;
import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.text.DecimalFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.ItemLabelAnchor;
import org.jfree.chart.labels.ItemLabelPosition;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.data.RangeType;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.TextAnchor;
public class aaa {
public static void main(String[] args) {
// TODO Auto-generated method stub
DefaultCategoryDataset dateSet = new DefaultCategoryDataset();
dateSet.setValue(4.5, "学习", "第一周");
dateSet.setValue(0.5, "实例检验", "第一周");
dateSet.setValue(4, "学习", "第二周");
dateSet.setValue(1, "实例检验", "第二周");
dateSet.setValue(3, "学习", "第三周");
dateSet.setValue(2, "实例检验", "第三周");
dateSet.setValue(2.5, "学习", "第四周");
dateSet.setValue(2.5, "实例检验", "第四周");
dateSet.setValue(2, "学习", "第五周");
dateSet.setValue(3, "实例检验", "第五周");
dateSet.setValue(1, "学习", "第六周");
dateSet.setValue(4, "实例检验", "第六周");
dateSet.setValue(3, "学习", "第七周");
dateSet.setValue(2, "实例检验", "第七周");
dateSet.setValue(1, "学习", "第八周");
dateSet.setValue(4, "实例检验", "第八周");
dateSet.setValue(3, "学习", "至今");
dateSet.setValue(2, "实例检验", "至今");
// dateSet.setValue(10,"坏","大\n梨");
String filePath = "D:\\picture\\学习柱状图.png";
columnarChart(dateSet, filePath);
}
public static void columnarChart(DefaultCategoryDataset dateSet, String filePath) {
// TODO Auto-generated method stub
try {
JFreeChart chart = ChartFactory.createBarChart("培训学习及实例检验所花时间柱状图", // 标题
"所花时间对比", // 目录轴的显示标签
"单位:天", // 数值的显示标签
dateSet, // 数据
PlotOrientation.VERTICAL, // 图标方向 水平/垂直
true, // 是否显示图例
false, // 是否生成工具
false); // 是否生成URL链接
CategoryPlot categoryPlot = chart.getCategoryPlot();// 图部分
// 设置网格beijingse
categoryPlot.setBackgroundPaint(Color.WHITE);
// 设置网格竖线颜色
categoryPlot.setDomainGridlinePaint(Color.pink);
// 设置网格横线颜色
categoryPlot.setRangeGridlinePaint(Color.pink);
CategoryAxis domainAxis = categoryPlot.getDomainAxis();// X轴
/**
* 注释:若想字符竖着显示: 比如: 我 爱 中 国 在添加数据的时候这样:
* dateSet.setValue(10,"www.ixj.com","我\n爱\n中\n国");
*/
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD);// X轴下标 90°显示
domainAxis.setMaximumCategoryLabelLines(10);// 自动换行 最多显示多少行
domainAxis.setLabelFont(new Font("黑体", Font.BOLD, 25));// 下标
domainAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 20));// X轴标题
ValueAxis rangeAxis = categoryPlot.getRangeAxis();// Y轴
rangeAxis.setLabelFont(new Font("黑体", Font.BOLD, 25));// 下标
rangeAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 20));// Y轴标题
NumberAxis numberAxis = (NumberAxis) categoryPlot.getRangeAxis();
numberAxis.setAutoTickUnitSelection(false);// 取消自动设置Y轴刻度
numberAxis.setTickUnit(new NumberTickUnit(2));// 刻度大小
numberAxis.setAutoRangeStickyZero(true);// 和下面一行搭配使用 设置Y轴都是正数
numberAxis.setRangeType(RangeType.POSITIVE);
numberAxis.setNumberFormatOverride(new DecimalFormat("0.0"));// 设置Y轴上的数值精度
chart.getLegend().setItemFont(new Font("黑体", Font.BOLD, 20));// 图标字体
chart.getTitle().setFont(new Font("黑体", Font.BOLD, 25));
BarRenderer renderer = (BarRenderer) categoryPlot.getRenderer();// 图形修改
// 设置标签生成器(默认{0})
// {0}:key {1}:value {2}:百分比 {3}:sum
renderer.setBaseItemLabelGenerator(
new StandardCategoryItemLabelGenerator("{2}天", new DecimalFormat("0.0")));// 设置柱状图上的数值精度
renderer.setItemMargin(0);// 设置柱子之间的距离
renderer.setPositiveItemLabelPositionFallback(
new ItemLabelPosition(ItemLabelAnchor.OUTSIDE12, TextAnchor.BOTTOM_CENTER));
renderer.setBaseItemLabelFont(new Font("黑体", Font.BOLD, 15));
renderer.setDrawBarOutline(false);
renderer.setMaximumBarWidth(0.2); // 设置柱子宽度
renderer.setMinimumBarLength(0.00); // 设置柱子高度
renderer.setBaseItemLabelsVisible(true);// 柱状体上的数值显示
File file = new File(filePath);
if (file.exists()) {
file.delete();
file.createNewFile();
}
ChartUtilities.saveChartAsPNG(file, chart, 1200, 900);
} catch (Exception e) {
throw new RuntimeException("柱状图格式错误!");
}
}
}