JfreeChart常用图形实现
来源:互联网 发布:网络管理经验 编辑:程序博客网 时间:2024/06/03 10:54
JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、散点图(scatter plots)、时序图(time series)、甘特图(Gantt charts)等等多种图表,并且可以产生PNG和JPEG格式的输出,还可以与PDF和EXCEL关联。
从官方下载到相应的文件后,解压缩后,将jfreechart-1.0.11.jar、jcommon-1.0.14.jar导入到应用中,就可以进行相关的开发。最好下载1.0之间的版本,官方提供了demo。开发文档需要收费的,所以还是在网上查阅相关资料。本例中实现了简单柱状图,复杂柱状图,非3D的折线图,3D的折线图,时序图,饼状图等图。
JSP代码:
<%@ page language="java" contentType="text/html" pageEncoding="GBK"%> <%@ page import="org.jfree.chart.servlet.ServletUtilities, com.lyq.util.*"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JFreeChart各种图</title> </head> <body> <center> <h1>柱状图</h1> <% String fileName1 = ServletUtilities.saveChartAsJPEG(ZhuzhuangChart.createChart(),500,300,session); String graphURL1 = request.getContextPath()+ "/DisplayChart?filename=" + fileName1; %> <img src="<%=graphURL1%>" border="1"><h1>复杂柱状图</h1> <% String fileName2 = ServletUtilities.saveChartAsJPEG(BarChartDemo.createChart(),500,300,session); String graphURL2 = request.getContextPath()+ "/DisplayChart?filename=" + fileName2; %> <img src="<%=graphURL2%>" border="1"><h1>非3D的折线图</h1> <% String fileName3 = ServletUtilities.saveChartAsJPEG(LineChart.createChart(false),500,300,session); String graphURL3 = request.getContextPath()+ "/DisplayChart?filename=" + fileName3; %><img src="<%=graphURL3%>" border="1"><h1>3D的折线图</h1> <% String fileName4 = ServletUtilities.saveChartAsJPEG(LineChart.createChart(true),500,300,session); String graphURL4 = request.getContextPath()+ "/DisplayChart?filename=" + fileName4; %><img src="<%=graphURL4%>" border="1"><h1>时序图</h1> <% String fileName5 = ServletUtilities.saveChartAsJPEG(TimeSeriesChart.createChart(),800,600,session); String graphURL5 = request.getContextPath()+ "/DisplayChart?filename=" + fileName5; %><img src="<%=graphURL5%>" border="1"><h1>饼状图</h1> <% String fileName6 = ServletUtilities.saveChartAsJPEG(PieChart.createChart(),500,300,session); String graphURL6 = request.getContextPath()+ "/DisplayChart?filename=" + fileName6; %><img src="<%=graphURL6%>" border="1"></center></body></html>
简单柱状图生成java代码:
package com.lyq.util;import java.awt.Font;import org.jfree.chart.ChartFactory;import org.jfree.chart.JFreeChart;import org.jfree.chart.StandardChartTheme;import org.jfree.chart.plot.PlotOrientation;import org.jfree.data.category.CategoryDataset;import org.jfree.data.category.DefaultCategoryDataset;public class ZhuzhuangChart {/** * 创建数据集合 * @return CategoryDataset对象 */ public static CategoryDataset createDataSet() { //实例化DefaultCategoryDataset对象 DefaultCategoryDataset dataSet = new DefaultCategoryDataset(); //向数据集合中添加数据 dataSet.addValue(500, "JAVA图书", "J2SE类"); dataSet.addValue(100, "JAVA图书", "J2ME类"); dataSet.addValue(900, "JAVA图书", "J2EE类"); return dataSet; } /** * 创建JFreeChart对象 * @return JFreeChart对象 */ public static JFreeChart createChart() { StandardChartTheme standardChartTheme =new StandardChartTheme("CN"); //创建主题样式 standardChartTheme.setExtraLargeFont(new Font("隶书", Font.BOLD, 20)); //设置标题字体 standardChartTheme.setRegularFont(new Font("宋体", Font.PLAIN, 15)); //设置图例的字体 standardChartTheme.setLargeFont(new Font("宋体", Font.PLAIN, 15)); //设置轴向的字体 ChartFactory.setChartTheme(standardChartTheme); //设置主题样式 //通过ChartFactory创建JFreeChart JFreeChart chart = ChartFactory.createBarChart3D( "JAVA图书销量统计", //图表标题 "JAVA图书", //横轴标题 "销量(本)", //纵轴标题 createDataSet(), //数据集合 PlotOrientation.VERTICAL, //图表方向 false, //是否显示图例标识 false, //是否显示tooltips false); //是否支持超链接 return chart; }}
复杂柱状图生成JAVA代码:
package com.lyq.util;import java.awt.Color;import java.awt.Font;import java.io.*;import org.jfree.data.category.CategoryDataset;import org.jfree.data.category.DefaultCategoryDataset;import org.jfree.chart.*;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.CategoryLabelPositions;import org.jfree.chart.axis.ValueAxis;import org.jfree.chart.plot.*;import org.jfree.chart.title.TextTitle;/** * 该类用于演示最简单的柱状图生成 * @author Winter Lau */public class BarChartDemo {public static JFreeChart createChart(){CategoryDataset dataset = getDataSet2();JFreeChart chart = ChartFactory.createBarChart3D("水果产量图", // 图表标题"水果", // 目录轴的显示标签"产量", // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, // 图表方向:水平、垂直true, // 是否显示图例(对于简单的柱状图必须是false)false, // 是否生成工具false // 是否生成URL链接);configFont(chart);//字体配置方法(解决中文乱码问题)return chart;}/** * 获取一个演示用的简单数据集对象 * @return */private static CategoryDataset getDataSet() {DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(100, null, "苹果");dataset.addValue(200, null, "梨子");dataset.addValue(300, null, "葡萄");dataset.addValue(400, null, "香蕉");dataset.addValue(500, null, "荔枝");return dataset;}/** * 获取一个演示用的组合数据集对象 * @return */private static CategoryDataset getDataSet2() {DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(100, "北京", "苹果");dataset.addValue(100, "上海", "苹果");dataset.addValue(100, "广州", "苹果");dataset.addValue(200, "北京", "梨子");dataset.addValue(200, "上海", "梨子");dataset.addValue(200, "广州", "梨子");dataset.addValue(300, "北京", "葡萄");dataset.addValue(300, "上海", "葡萄");dataset.addValue(300, "广州", "葡萄");dataset.addValue(400, "北京", "香蕉");dataset.addValue(400, "上海", "香蕉");dataset.addValue(400, "广州", "香蕉");dataset.addValue(500, "北京", "荔枝");dataset.addValue(500, "上海", "荔枝");dataset.addValue(500, "广州", "荔枝");return dataset;}//字体配置方法(解决中文乱码问题) private static void configFont(JFreeChart chart) { // 配置字体 Font xfont = new Font("宋体", Font.BOLD, 12);// X轴 Font yfont = new Font("宋体", Font.BOLD, 12);// Y轴 Font kfont = new Font("宋体", Font.BOLD, 12);// 底部 Font titleFont = new Font("隶书", Font.BOLD, 25); // 图片标题 CategoryPlot plot = chart.getCategoryPlot();// 图形的绘制结构对象 // 图片标题 chart.setTitle(new TextTitle(chart.getTitle().getText(), titleFont)); // 底部 chart.getLegend().setItemFont(kfont); // X 轴 CategoryAxis domainAxis = plot.getDomainAxis(); domainAxis.setLabelFont(xfont);// 轴标题 domainAxis.setTickLabelFont(xfont);// 轴数值 domainAxis.setTickLabelPaint(Color.BLUE); // 字体颜色 domainAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD); // 横轴上的label斜显示 // Y 轴 ValueAxis rangeAxis = plot.getRangeAxis(); rangeAxis.setLabelFont(yfont); rangeAxis.setLabelPaint(Color.BLUE); // 字体颜色 rangeAxis.setTickLabelFont(yfont); }}
折线图java代码:
package com.lyq.util;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.util.Random;import org.jfree.chart.ChartFactory;import org.jfree.chart.JFreeChart;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.LineAndShapeRenderer;import org.jfree.data.category.CategoryDataset;import org.jfree.data.category.DefaultCategoryDataset;public class LineChart {//字体 private static final Font PLOT_FONT = new Font("宋体", Font.BOLD, 15); /** * 创建数据集合 * @return CategoryDataset对象 */ public static CategoryDataset createDataSet() { //图例名称 String[] line = { "杀毒软件一", "杀毒软件二", "杀毒软件三" }; //类别 String[] category = { "2004年","2005年","2006年", "2007年", "2008年" }; Random random = new Random(); //实例化Random对象 //实例化DefaultCategoryDataset对象 DefaultCategoryDataset dataSet = new DefaultCategoryDataset(); //使用循环向数据集合中添加数据 for (int i = 0; i < line.length; i++) { for (int j = 0; j < category.length; j++) { dataSet.addValue(100000 + random.nextInt(100000), line[i], category[j]); } } return dataSet; } /** * 生成制图对象 * @param is3D 是否为3D效果 * @return JFreeChart对象 */ public static JFreeChart createChart(boolean is3D) { JFreeChart chart = null; if(is3D){ chart = ChartFactory.createLineChart3D( "2004-2008年优秀杀毒软件杀毒数量统计", //图表标题 "杀毒软件", //X轴标题 "查杀病毒数量", //Y轴标题 createDataSet(), //绘图数据集 PlotOrientation.VERTICAL, //绘制方向 true, //显示图例 true, //采用标准生成器 false //是否生成超链接 ); }else{ chart = ChartFactory.createLineChart( "2004-2008年优秀杀毒软件杀毒数量统计", //图表标题 "杀毒软件", //X轴标题 "查杀病毒数量", //Y轴标题 createDataSet(), //绘图数据集 PlotOrientation.VERTICAL, //绘制方向 true, //是否显示图例 true, //是否采用标准生成器 false //是否生成超链接 ); } //设置标题字体 chart.getTitle().setFont(new Font("隶书", Font.BOLD, 23)); //设置图例类别字体 chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15)); chart.setBackgroundPaint(new Color(255,255,255)); //设置背景色 //获取绘图区对象 CategoryPlot plot = chart.getCategoryPlot(); plot.getDomainAxis().setLabelFont(PLOT_FONT); //设置横轴字体 plot.getDomainAxis().setTickLabelFont(PLOT_FONT);//设置坐标轴标尺值字体 plot.getRangeAxis().setLabelFont(PLOT_FONT); //设置纵轴字体 plot.setBackgroundPaint(Color.WHITE); //设置绘图区背景色 plot.setRangeGridlinePaint(Color.RED); //设置水平方向背景线颜色 plot.setRangeGridlinesVisible(true); //设置是否显示水平方向背景线,默认值为true plot.setDomainGridlinePaint(Color.RED); //设置垂直方向背景线颜色 plot.setDomainGridlinesVisible(true); //设置是否显示垂直方向背景线,默认值为false //获取折线对象 LineAndShapeRenderer renderer = (LineAndShapeRenderer) plot .getRenderer(); BasicStroke realLine = new BasicStroke(//设置实线 5.0f, BasicStroke.CAP_SQUARE, //端点风格 BasicStroke.JOIN_MITER); //折点风格 ; float dashes[] = { 8.0f }; //定义虚线数组 BasicStroke brokenLine = new BasicStroke( 5.0f, //线条粗细 BasicStroke.CAP_SQUARE, //端点风格 BasicStroke.JOIN_MITER, //折点风格 8.f, //折点处理办法 dashes, //虚线数组 0.0f); //虚线偏移量 renderer.setSeriesStroke(1, brokenLine); //利用虚线绘制 renderer.setSeriesStroke(2, brokenLine);//利用虚线绘制 renderer.setSeriesStroke(3, realLine);//利用实线绘制 return chart; } }
饼状图java代码:
package com.lyq.util;import java.awt.Font;import org.jfree.chart.ChartFactory;import org.jfree.chart.JFreeChart;import org.jfree.chart.labels.StandardPieSectionLabelGenerator;import org.jfree.chart.plot.PiePlot3D;import org.jfree.data.general.DefaultPieDataset;import org.jfree.data.general.PieDataset;public class PieChart { public static JFreeChart createChart(){ PieDataset dataset = getDataSet(); JFreeChart chart = ChartFactory.createPieChart3D("CD类别对照图", // 主标题 dataset, // 图形需要的数据 true, // 图例 false, // 是否在图表上显示提示 false); // 该图形是否产生url连接 // 获取图表对象 plot(图形的绘制结构) PiePlot3D piePlot3D = (PiePlot3D) chart.getPlot(); /* * 产生饼图上个的数字和百分比 {0}:{1}({2}) {0} : dataset.setValue("摇滚乐", 8);值中的"摇滚乐" {1} : dataset.setValue("摇滚乐", 8);值中的"8" {2} : 该值占用的百分比 */ String labelFormat = "{0}:{1}({2})"; piePlot3D.setLabelGenerator(new StandardPieSectionLabelGenerator(labelFormat)); piePlot3D.setLabelFont(new Font("黑体", Font.PLAIN, 18)); // 处理乱码 // 处理主标题 chart.getTitle().setFont(new Font("黑体", Font.PLAIN, 18)); // 处理子标题 chart.getLegend().setItemFont(new Font("黑体", Font.PLAIN, 18)); // 设置饼图上的中文字体 放置乱码 piePlot3D.setLabelFont(new Font("黑体", Font.PLAIN, 18)); return chart; } private static PieDataset getDataSet() { DefaultPieDataset dataset = new DefaultPieDataset(); /* * 摇滚乐 8 外国歌曲 1 民乐 6 流行音乐 6 */ dataset.setValue("摇滚乐", 8); dataset.setValue("外国歌曲", 1); dataset.setValue("民乐", 6); dataset.setValue("流行音乐", 6); return dataset; }}
时序图java源代码:
package com.lyq.util;import java.awt.Color;import java.awt.Font;import java.text.DateFormat;import java.text.SimpleDateFormat;import org.jfree.chart.ChartFactory;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.DateAxis;import org.jfree.chart.axis.DateTickUnit;import org.jfree.chart.axis.DateTickUnitType;import org.jfree.chart.axis.ValueAxis;import org.jfree.chart.plot.XYPlot;import org.jfree.data.time.Day;import org.jfree.data.time.TimeSeries;import org.jfree.data.time.TimeSeriesCollection;import org.jfree.data.xy.XYDataset;public class TimeSeriesChart { //字体 private static final Font PLOT_FONT = new Font("黑体", Font.ITALIC , 18); /** * 创建数据集合 * @return XYDataset对象 */ public static XYDataset createDataset() { //实例化TimeSeries对象 TimeSeries timeseries = new TimeSeries("Data"); Day day = new Day(1, 1, 2008); //实例化Day double d = 3000D; //添加一年365天的数据 for (int i = 0; i < 365; i++) { d = d + (Math.random() - 0.5) * 10; //创建随机数据 timeseries.add(day, d); //向数据集合中添加数据 day = (Day) day.next(); } //创建TimeSeriesCollection集合对象 TimeSeriesCollection timeSeriesCollection =new TimeSeriesCollection(timeseries); //返回数据集合对象 return timeSeriesCollection; } /** * 生成制图对象 * @return JFreeChart对象 */ public static JFreeChart createChart(){ //创建时序图对象 JFreeChart chart = ChartFactory.createTimeSeriesChart( "编程词典全国销量统计", //标题 "销售月份", //时间轴标签 "销量(份)", //数据轴标签 createDataset(), //数据集合 false, //是否显示图例标识 false, //是否显示tooltips false); //是否支持超链接 //设置标题字体 chart.getTitle().setFont(new Font("隶书", Font.BOLD, 26)); //设置背景色 chart.setBackgroundPaint(new Color(252,175,134)); XYPlot plot = chart.getXYPlot(); //获取图表的绘制属性 plot.setDomainGridlinesVisible(false); //设置网格不显示 //获取时间轴对象 DateAxis dateAxis = (DateAxis) plot.getDomainAxis(); dateAxis.setLabelFont(PLOT_FONT); //设置时间轴字体 //设置时间轴标尺值字体 dateAxis.setTickLabelFont(new Font("宋体",Font.PLAIN,12)); dateAxis.setLowerMargin(0.0); //设置时间轴上显示的最小值 //获取数据轴对象 ValueAxis valueAxis = plot.getRangeAxis(); valueAxis.setLabelFont(PLOT_FONT); //设置数据字体 DateFormat format = new SimpleDateFormat("MM月份"); //创建日期格式对象 //创建DateTickUnit对象 DateTickUnit dtu = new DateTickUnit(DateTickUnitType.DAY,29,format); dateAxis.setTickUnit(dtu); //设置日期轴的日期标签 return chart; }}
运行结果:
柱状图
复杂柱状图
非3D的折线图
3D的折线图
时序图
饼状图
- JfreeChart常用图形实现
- JFreeChart实现图形报表
- JFreeChart 生成图形 例子
- JFreeChart所有图形例子
- JFreeChart图形报表实例
- jfreechart图形报表
- jfreechart生成各种图形
- 使用JFreeChart制作图形
- JFreeChart java 图形绘制
- 使用JFreeChart制作图形报表
- 使用JFreeChart制作图形报表
- 使用JFreeChart制作图形报表
- 使用jfreechart创建图形报表
- JFreeChart各种图形的制作
- jfreechart JAVA图形化工具
- jfreechart图形绘制(一)
- JFreeChart常用函数
- JFreeChart 常用 API
- CreateThread多参数传递
- 进入黑马day1-关于云计算
- 智慧书-永恒的处世经典格言:1-40
- 解释与编译
- SetThreadAffinityMask
- JfreeChart常用图形实现
- c++建立DLL 及c# 调用
- struts2中配置json
- xp下硬盘安装ubuntu
- lucene RAMDirectory org.apache.lucene.index.IndexNotFoundException
- MyEclipse9.1下 装在SVN 插件
- spring 中prototype 和 reqeust的区别
- lucene3.5与mysql 查询性能的对比
- java 数据结构--HashMap