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、运行结果