JFreeChart 之折线图

JFreeChart 之折线图

一、JFreeChart 简介

  JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。

二、JFreeChart 的使用

  官方网站:http://www.jfree.org/

  下载地址:https://sourceforge.net/projects/jfreechart/files/1.%20JFreeChart/

1、拷贝相关的 Jar (jcommon-1.0.23.jar和jfreechart-1.0.19.jar)到 Java 项目中

2、折线图示例(LineChart.java

 1 package cn.com.zfc.jfreechart;
 2 
 3 import java.awt.Font;
 4 import java.awt.Rectangle;
 5 import java.io.File;
 6 import java.io.IOException;
 7 
 8 import org.jfree.chart.ChartFactory;
 9 import org.jfree.chart.ChartFrame;
10 import org.jfree.chart.ChartUtilities;
11 import org.jfree.chart.JFreeChart;
12 import org.jfree.chart.axis.CategoryAxis;
13 import org.jfree.chart.axis.NumberAxis;
14 import org.jfree.chart.axis.NumberTickUnit;
15 import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
16 import org.jfree.chart.plot.CategoryPlot;
17 import org.jfree.chart.plot.PlotOrientation;
18 import org.jfree.chart.renderer.category.LineAndShapeRenderer;
19 import org.jfree.data.category.DefaultCategoryDataset;
20 
21 /**
22  * 使用 JFreeChart 技术画折线图
23  * 
24  * @describe
25  * @author zfc
26  * @date 2017年12月28日 下午7:21:51
27  */
28 public class LineChart {
29     public static void main(String[] args) {
30         DefaultCategoryDataset dataset = new DefaultCategoryDataset();
31         // 添加数据
32         dataset.addValue(98, "数学", "张三");
33         dataset.addValue(68, "数学", "李四");
34         dataset.addValue(56, "数学", "王五");
35         JFreeChart chart = ChartFactory.createLineChart("用户统计报表(所属单位)", // 主标题的名称
36                 "所属单位名称", // X轴的标签
37                 "数量", // Y轴的标签
38                 dataset, // 图标显示的数据集合
39                 PlotOrientation.VERTICAL, // 图像的显示形式(水平或者垂直)
40                 true, // 是否显示子标题
41                 true, // 是否生成提示的标签
42                 true); // 是否生成URL链接 // 处理图形上的乱码 // 处理主标题的乱码
43         chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
44         // 处理子标题乱码
45         chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));
46         // 获取图表区域对象
47         CategoryPlot categoryPlot = (CategoryPlot) chart.getPlot();
48         // 获取X轴的对象
49         CategoryAxis categoryAxis = (CategoryAxis) categoryPlot.getDomainAxis();
50         // 获取Y轴的对象
51         NumberAxis numberAxis = (NumberAxis) categoryPlot.getRangeAxis();
52         // 处理X轴上的乱码
53         categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
54         // 处理X轴外的乱码
55         categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 15));
56         // 处理Y轴上的乱码
57         numberAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 15));
58         // 处理Y轴外的乱码
59         numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 15));
60         // 处理Y轴上显示的刻度,以10作为1格
61         numberAxis.setAutoTickUnitSelection(false);
62         NumberTickUnit unit = new NumberTickUnit(10);
63         numberAxis.setTickUnit(unit);
64         // 获取绘图区域对象
65         LineAndShapeRenderer lineAndShapeRenderer = (LineAndShapeRenderer) categoryPlot.getRenderer();
66         // 在图形上显示数字
67         lineAndShapeRenderer.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
68         lineAndShapeRenderer.setBaseItemLabelsVisible(true);
69         lineAndShapeRenderer.setBaseItemLabelFont(new Font("宋体", Font.BOLD, 15));
70         // 在图形上添加转折点(使用小矩形显示)
71         Rectangle shape = new Rectangle(10, 10);
72         lineAndShapeRenderer.setSeriesShape(0, shape);
73         lineAndShapeRenderer.setSeriesShapesVisible(0, true);
74         /* 8、生成相应的图片 */
75         File file = new File("LineChart.JPEG");
76         try {
77             ChartUtilities.saveChartAsJPEG(file, chart, 800, 600);
78         } catch (IOException e) {
79             e.printStackTrace();
80         }
81         // 使用ChartFrame对象显示图像
82         ChartFrame frame = new ChartFrame("zfc", chart);
83         frame.setVisible(true);
84         frame.pack();
85     }
86 }

3、运行结果

posted @ 2017-12-28 19:24  勇闯天涯zfc  阅读(937)  评论(0编辑  收藏  举报