http://supben.iteye.com/blog/821779
我们以折线图为例子
第一步,构建数据集
- /**
- * 获取数据集
- * @return
- */
- private CategoryDataset getDataset() {
- DefaultCategoryDataset dataset = new DefaultCategoryDataset();
- dataset.addValue(2.8, "冰箱", "1月");
- dataset.addValue(4.2, "冰箱", "2月");
- dataset.addValue(3.9, "冰箱", "3月");
- dataset.addValue(3.8, "冰箱", "4月");
- dataset.addValue(4.2, "冰箱", "5月");
- dataset.addValue(3.9, "冰箱", "6月");
- dataset.addValue(1.7, "冰箱", "7月");
- dataset.addValue(4.2, "冰箱", "8月");
- dataset.addValue(3.9, "冰箱", "9月");
- dataset.addValue(2.5, "冰箱", "10月");
- dataset.addValue(4.2, "冰箱", "11月");
- dataset.addValue(3.9, "冰箱", "12月");
- dataset.addValue(1.2, "彩电", "1月");
- dataset.addValue(3.2, "彩电", "2月");
- dataset.addValue(4.9, "彩电", "3月");
- dataset.addValue(2.5, "彩电", "4月");
- dataset.addValue(3.2, "彩电", "5月");
- dataset.addValue(1.9, "彩电", "6月");
- dataset.addValue(2.7, "彩电", "7月");
- dataset.addValue(3.2, "彩电", "8月");
- dataset.addValue(3.9, "彩电", "9月");
- dataset.addValue(3.0, "彩电", "10月");
- dataset.addValue(1.2, "彩电", "11月");
- dataset.addValue(1.9, "彩电", "12月");
- return dataset;
- }
/** * 获取数据集 * @return */ private CategoryDataset getDataset() { DefaultCategoryDataset dataset = new DefaultCategoryDataset(); dataset.addValue(2.8, "冰箱", "1月"); dataset.addValue(4.2, "冰箱", "2月"); dataset.addValue(3.9, "冰箱", "3月"); dataset.addValue(3.8, "冰箱", "4月"); dataset.addValue(4.2, "冰箱", "5月"); dataset.addValue(3.9, "冰箱", "6月"); dataset.addValue(1.7, "冰箱", "7月"); dataset.addValue(4.2, "冰箱", "8月"); dataset.addValue(3.9, "冰箱", "9月"); dataset.addValue(2.5, "冰箱", "10月"); dataset.addValue(4.2, "冰箱", "11月"); dataset.addValue(3.9, "冰箱", "12月"); dataset.addValue(1.2, "彩电", "1月"); dataset.addValue(3.2, "彩电", "2月"); dataset.addValue(4.9, "彩电", "3月"); dataset.addValue(2.5, "彩电", "4月"); dataset.addValue(3.2, "彩电", "5月"); dataset.addValue(1.9, "彩电", "6月"); dataset.addValue(2.7, "彩电", "7月"); dataset.addValue(3.2, "彩电", "8月"); dataset.addValue(3.9, "彩电", "9月"); dataset.addValue(3.0, "彩电", "10月"); dataset.addValue(1.2, "彩电", "11月"); dataset.addValue(1.9, "彩电", "12月"); return dataset; }
第二步,根据数据集构建折线图
- private JFreeChart createChart() {
- CategoryDataset dataset = getDataset();
- //标题,x轴,y轴,数据集,图标方向,是否显示图例,是否生成工具,是否生成url
- JFreeChart line = ChartFactory.createLineChart("折线图", "时间", "销售额(百万)", dataset, PlotOrientation.VERTICAL, true,
- true, false);
- line.setBackgroundPaint(new Color(200, 200, 255));
- //设置标题文字
- line.getTitle().setFont(new Font("黑体", Font.BOLD, 18));
- //设置底部图例字体
- line.getLegend().setItemFont(new Font("黑体", Font.BOLD, 12));
- CategoryPlot plot = line.getCategoryPlot();
- //网格线的颜色,就是与x轴平行的一条一条的虚线
- plot.setRangeGridlinePaint(new Color(70, 70, 170));
- //设置图区的背景色
- //plot.setBackgroundPaint(new Color(255, 255, 255));
- LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer();
- //设置第一个根线为蓝色加粗
- renderer.setSeriesStroke(0, new BasicStroke(2.0f));
- renderer.setSeriesPaint(0, new Color(0, 0, 255));
- //设置第2根线为红色加粗
- renderer.setSeriesStroke(1, new BasicStroke(2.0f));
- renderer.setSeriesPaint(1, new Color(255, 0, 0));
- //设置数据点可见
- renderer.setBaseShapesVisible(true);
- //显示数据点的值可见
- renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
- renderer.setBaseItemLabelsVisible(true);
- //获取x轴
- CategoryAxis axis = plot.getDomainAxis();
- //获取y轴
- ValueAxis numberAxis = plot.getRangeAxis();
- axis.setLabelFont(new Font("黑体", Font.BOLD, 12));
- axis.setTickLabelFont(new Font("黑体", Font.BOLD, 12));
- numberAxis.setTickLabelFont(new Font("黑体", Font.BOLD, 12));
- numberAxis.setLabelFont(new Font("黑体", Font.BOLD, 12));
- return line;
- }
private JFreeChart createChart() { CategoryDataset dataset = getDataset(); //标题,x轴,y轴,数据集,图标方向,是否显示图例,是否生成工具,是否生成url JFreeChart line = ChartFactory.createLineChart("折线图", "时间", "销售额(百万)", dataset, PlotOrientation.VERTICAL, true, true, false); line.setBackgroundPaint(new Color(200, 200, 255)); //设置标题文字 line.getTitle().setFont(new Font("黑体", Font.BOLD, 18)); //设置底部图例字体 line.getLegend().setItemFont(new Font("黑体", Font.BOLD, 12)); CategoryPlot plot = line.getCategoryPlot(); //网格线的颜色,就是与x轴平行的一条一条的虚线 plot.setRangeGridlinePaint(new Color(70, 70, 170)); //设置图区的背景色 //plot.setBackgroundPaint(new Color(255, 255, 255)); LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot.getRenderer(); //设置第一个根线为蓝色加粗 renderer.setSeriesStroke(0, new BasicStroke(2.0f)); renderer.setSeriesPaint(0, new Color(0, 0, 255)); //设置第2根线为红色加粗 renderer.setSeriesStroke(1, new BasicStroke(2.0f)); renderer.setSeriesPaint(1, new Color(255, 0, 0)); //设置数据点可见 renderer.setBaseShapesVisible(true); //显示数据点的值可见 renderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator()); renderer.setBaseItemLabelsVisible(true); //获取x轴 CategoryAxis axis = plot.getDomainAxis(); //获取y轴 ValueAxis numberAxis = plot.getRangeAxis(); axis.setLabelFont(new Font("黑体", Font.BOLD, 12)); axis.setTickLabelFont(new Font("黑体", Font.BOLD, 12)); numberAxis.setTickLabelFont(new Font("黑体", Font.BOLD, 12)); numberAxis.setLabelFont(new Font("黑体", Font.BOLD, 12)); return line; }
第3步,输出图片
- //生成图片
- private void createPng() {
- JFreeChart jfreechart = createChart();
- OutputStream os;
- try {
- os = new FileOutputStream("d:/line.png");
- ChartUtilities.writeChartAsPNG(os, jfreechart, 800, 400);
- os.close();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
//生成图片 private void createPng() { JFreeChart jfreechart = createChart(); OutputStream os; try { os = new FileOutputStream("d:/line.png"); ChartUtilities.writeChartAsPNG(os, jfreechart, 800, 400); os.close(); } catch (Exception e) { e.printStackTrace(); } }
注:附件是代码和支持jar包,包括,折线图,饼图,柱状图的例子