使用JFreeChart生成柱状图需要使用CategoryDataset作为统计图表的数据载体,生成柱状图后依然可以使用JFreeChart来设置统计图表的标题和图例格式。要实现设置柱状图的实际图表,同样要调用JFreeChart的getPlot方法来取得实际图表实例。
下面是一个生成简单柱状图的实例,该实例需要jfreechart-1.0.13.jar和jcommon-1.0.16.jar两个JAR包的支持。
BarChart3DDemo.java代码
- package jfreechat;
- import java.awt.Font;
- import java.io.FileOutputStream;
- import java.io.IOException;
- 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.plot.CategoryPlot;
- import org.jfree.chart.plot.PlotOrientation;
- import org.jfree.chart.title.TextTitle;
- import org.jfree.data.category.CategoryDataset;
- import org.jfree.data.category.DefaultCategoryDataset;
- public class BarChart3DDemo {
- /**
- * @param args
- * @author xuliang
- * @date 2010-3-17 10:29:58
- */
- private static CategoryDataset getDataset(){
- DefaultCategoryDataset dataset = new DefaultCategoryDataset();
- dataset.addValue(4.0, "", "2010-02-01");
- dataset.addValue(4.4, "", "2010-02-04");
- dataset.addValue(4.2, "", "2010-02-05");
- dataset.addValue(4.1, "", "2010-02-08");
- dataset.addValue(4.0, "", "2010-02-11");
- dataset.addValue(4.1, "", "2010-02-12");
- dataset.addValue(3.9, "", "2010-02-19");
- dataset.addValue(4.0, "", "2010-02-22");
- dataset.addValue(6.1, "", "2010-02-25");
- dataset.addValue(4.9, "", "2010-02-26");
- dataset.addValue(4.4, "", "2010-03-01");
- dataset.addValue(4.3, "", "2010-03-05");
- dataset.addValue(4.4, "", "2010-03-08");
- dataset.addValue(5.6, "", "2010-03-11");
- dataset.addValue(5.9, "", "2010-03-12");
- dataset.addValue(4.1, "", "2010-03-15");
- return dataset;
- }
- public static void main(String[] args) throws IOException {
- JFreeChart chart = ChartFactory.createBarChart3D(
- "MRP Run Time", //图表标题
- "日期", //X轴标签
- "MRP单次运行总耗时", //Y轴标签
- getDataset(), //数据集合
- //PlotOrientation.HORIZONTAL, //图表方向:水平
- PlotOrientation.VERTICAL, //图表方向:垂直
- false, //是否显示图例
- false, //是否生成工具
- false //是否生成URL链接
- );
- //重新设置图表标题,改变字体样式
- chart.setTitle(new TextTitle("MRP Run Time",new Font("黑体", Font.ITALIC, 22)));
- CategoryPlot plot = (CategoryPlot) chart.getPlot();
- //取得X轴
- CategoryAxis categoryAxis = plot.getDomainAxis();
- categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 20));
- //设置分类标签倾斜45¡ã
- categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
- categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 18));
- //取得Y轴
- NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
- numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 20));
- //输出到图片文件
- FileOutputStream fos = null;
- fos = new FileOutputStream("D:\\MRPTime.jpg");
- ChartUtilities.writeChartAsJPEG(
- fos, //文件流
- 1, //图片质量,0到1之间
- chart, //统计图表对象
- 800, //图片宽度
- 600, //图片高度
- null //图片信息
- );
- fos.close();
- }
- }
在上面的代码中,为了修改柱状图坐标轴的显示格式,使用了两个XXXAxis实例,其中CategoryAxis代表柱状图的横轴,NumberAxis则代表柱状图的纵轴。
对于有坐标轴的统计图表而言,分别调用CategoryPlot的如下两个方法,即可取得柱状图的横轴和纵轴。
一旦获得了柱状图的两个坐标轴之后,就可以任意修改坐标轴上的输出格式。
- package jfreechat;
- import java.awt.Font;
- import java.io.FileOutputStream;
- import java.io.IOException;
- 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.plot.CategoryPlot;
- import org.jfree.chart.plot.PlotOrientation;
- import org.jfree.chart.title.LegendTitle;
- import org.jfree.chart.title.TextTitle;
- import org.jfree.data.category.CategoryDataset;
- import org.jfree.data.category.DefaultCategoryDataset;
- public class BarChartbook {
- /**
- * @param args
- * @author xuliang
- * @date 2010-3-17 22:29:43
- */
- //返回一个CategoryDataset实例
- private static CategoryDataset getDataset(){
- //创建DefaultCategoryDataset实例
- DefaultCategoryDataset dataset = new DefaultCategoryDataset();
- dataset.addValue(45000, "深圳", "JavaScript高级程序设计");
- dataset.addValue(38000, "深圳", "Java编程思想");
- dataset.addValue(24000, "深圳", "锋利的jQuery");
- dataset.addValue(32000, "深圳", "SAP高级应用开发");
- dataset.addValue(21000, "深圳", "精通Hibernate");
- dataset.addValue(37000, "武汉", "JavaScript高级程序设计");
- dataset.addValue(36000, "武汉", "Java编程思想");
- dataset.addValue(34000, "武汉", "锋利的jQuery");
- dataset.addValue(42000, "武汉", "SAP高级应用开发");
- dataset.addValue(12000, "武汉", "精通Hibernate");
- dataset.addValue(42000, "北京", "JavaScript高级程序设计");
- dataset.addValue(40000, "北京", "Java编程思想");
- dataset.addValue(34000, "北京", "锋利的jQuery");
- dataset.addValue(18000, "北京", "SAP高级应用开发");
- dataset.addValue(26000, "北京", "精通Hibernate");
- return dataset;
- }
- public static void main(String[] args) throws IOException {
- JFreeChart chart = ChartFactory.createBarChart(
- "图书销量统计图", //图表标题
- "书名", //X轴书签
- "图书销量(册)", //Y轴书签
- getDataset(), //数据集
- PlotOrientation.VERTICAL, //图表方向:垂直
- true, //是否显示图例
- false, //是否生成工具
- false //是否生成URL链接
- );
- //重新设置图表标题,改变字体样式
- chart.setTitle(new TextTitle(
- "图书销量统计图",
- new Font("黑体", Font.ITALIC, 22))
- );
- //取得图表的第一个实例
- LegendTitle legend = chart.getLegend(0);
- //修改图例的字体
- legend.setItemFont(new Font("宋体", Font.BOLD, 14));
- CategoryPlot plot = (CategoryPlot) chart.getPlot();
- //取得横轴
- CategoryAxis axis = plot.getDomainAxis();
- axis.setLabelFont(new Font("宋体", Font.BOLD, 22));
- axis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
- axis.setTickLabelFont(new Font("宋体", Font.BOLD, 18));
- //取得纵轴
- NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
- numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 22));
- //输出文件
- FileOutputStream fos = null;
- fos = new FileOutputStream("D:\\BookSales.jpg");
- ChartUtilities.writeChartAsJPEG(
- fos, //文件流
- 1, //图片质量,1到0之间
- chart, //统计图表对象
- 800, //宽度
- 600, //高度
- null //图片信息
- );
- fos.close();
- }
- }
在此例中,创建CategoryDataset实例时调用了addValue方法,调用时传入了三个参数,其中第二个参数时一组数据的key,即在数据集中,数据按照“深圳”、“武汉”、“北京”三个地方进行了分类。
以上转自http://www.sunchis.com/html/java/javareport/2010/0317/81.html 若此链接还有效的话 请大家进入查看 !