接口测试 单例模式 跨域 CSS选择器 canal安装 sqlite razor solr Amaze UI vue前端框架 h5表格模板 sql server 视频教程 photoshop cs3 教程 大数据驾驶舱 spark文档 虚拟机重启命令 bitlocker加密好慢 idea导入多个项目 kafka学习 jquery获取兄弟节点 destoon python指令 python自学入门 java正则表达式用法 java开发接口 java中的继承 java环境包 java中instanceof java中的集合 java线程停止 linuxtar命令 php整站源码 java网络编程 脚本下载 销售清单打印软件 EasyCHM 摩斯密码翻译 苹果5s降级 枪神传说辅助 零基础学python
当前位置: 首页 > 学习教程  > 编程学习

JFreeChart制作图表--饼图

2021/1/9 2:16:55 文章标签: 复合条饼图

一、JFreeChart介绍 JFreeChart 项目简介 JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表…

一、JFreeChart介绍

JFreeChart 项目简介 JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。这些不同式样的图表基本上可以满足目前的要求。

二、JFreeChart获取

JFreeChart 是JFreeChart公司在开源网站SourceForge.net上的一个项目,该公司的主要产品有如下: 
1.JFreeReport :报表解决工具 
2.JFreeChart:Java 图形解决方案(Application/Applet/Servlet/Jsp) 
3.JCommon :JFreeReport和JFreeChart的公共类库 
4.JFreeDesigner :JFreeReport的报表设计工具 
我们可以从jfree官方网站上获取最新版本和相关资料(但是jfree的document需要40美金才能获取), 
获取地址:http://www.jfree.org/jfreechart/index.html(同时可以获得简明介绍) 
我们以当前最新版本:jfreechart-1.0.1.zip为例子进行说明。 

JFreeChart API在线:http://www.jfree.org/jfreechart/api/javadoc/index.html

三、JFreeChart配置

1 、解压jfreechart-1.0.1.zip.zip到指定位置,其中source是jfreechart的源码,jfreechart-1.0.1-demo.jar 是例子程序。
2 、设置build classpath。加入jfreechart-1.0.1.jar 、jcommon-1.0.0.jar两个jar包

四、JFreeChart功能介绍

JFreeChart 目前是最好的java图形解决方案,基本能够解决目前的图形方面的需求,主要包括如下几个方面: 
pie charts (2D and 3D) :饼图(平面和立体) 
bar charts (regular and stacked, with an optional 3D effect) :柱状图 
line and area charts :曲线图 
scatter plots and bubble charts 
time series, high/low/open/close charts and candle stick charts :时序图 
combination charts :复合图 
Pareto charts :Pareto图
Gantt charts :甘特图 
wind plots, meter charts and symbol charts 
wafer map charts 
( 态图表,饼图(二维和三维) , 柱状图 ( 水平,垂直),线图,点图,时间变化图,甘特图, 股票行情图,混和图, 温度计图, 刻度图等常用商用图表) 
图形可以导出成PNG和JPEG格式,同时还可以与PDF和EXCEL关联。

五、JFreeChart 核心类库介绍: 
研究jfreechart源码发现源码的主要由两个大的包组成:org.jfree.chart,org.jfree.data。其中前者主要与图形本身有关,后者与图形显示的数据有关。
核心类主要有: 
org.jfree.chart.JFreeChart :图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象 
org.jfree.data.category.XXXDataSet: 数据集对象,用于提供显示图表所用的数据。根据不同类型的图表对应着很多类型的数据集对象类 
org.jfree.chart.plot.XXXPlot :图表区域对象,基本上这个对象决定着什么样式的图表,创建该对象的时候需要Axis、Renderer以及数据集对象的支持 
org.jfree.chart.axis.XXXAxis :用于处理图表的两个轴:纵轴和横轴 
org.jfree.chart.render.XXXRender :负责如何显示一个图表对象 
org.jfree.chart.urls.XXXURLGenerator: 用于生成Web图表中每个项目的鼠标点击链接 
XXXXXToolTipGenerator: 用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类 

六、实际开发--饼图

饼图有2D和3D两种样式,但是建立图形的基本流程都是一样的。

首先展示一下生成的图表样式:


1、设置图表整体样式(图表标题字体)

2、自定义设置plot中标签的显示方式

3、设置底部图例(legend)的字体

注:为什么要设置字体?因为如果使用默认字体的话,显示的是乱码。

下面基本的代码就可以实现一个饼图:

import java.awt.Color;
import java.awt.Font;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.labels.StandardPieToolTipGenerator;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;

public class Pie {
	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{	
		//设置数据源	
		PieDataset mDataset = GetDataset();	
		//建立图表
		JFreeChart mChart = ChartFactory.createPieChart3D("项目进度分布", mDataset, true, true, false);
		//设置图表标题
		mChart.setTitle(new TextTitle("项目状态分布", new Font("黑体",Font.CENTER_BASELINE, 20)));
		//设置Legend字体
		mChart.getLegend().setItemFont(new Font("宋体", Font.ROMAN_BASELINE, 15));
		
		PiePlot3D mPiePlot = (PiePlot3D)mChart.getPlot();
		//以默认方式显示百分比
		//mPiePlot.setLabelGenerator(new StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));
		// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
		mPiePlot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%")));
		// 底部图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例 
		mPiePlot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})"));
		//设置饼图标签字体
		mPiePlot.setLabelFont(new Font("宋体", Font.PLAIN, 15));
		//内置对象显示图表
		ChartFrame mChartFrame = new ChartFrame("项目状态分布", mChart);
		mChartFrame.pack();
		mChartFrame.setVisible(true);
		
	}
	public static PieDataset GetDataset()
	{
		DefaultPieDataset mDataset = new DefaultPieDataset();		
		mDataset.setValue(" 市场前期", new Double(10)); 
		mDataset.setValue(" 立项", new Double(15)); 
		mDataset.setValue(" 计划", new Double(10)); 
		mDataset.setValue(" 需求与设计", new Double(10)); 
		mDataset.setValue(" 执行控制", new Double(35)); 
		mDataset.setValue(" 收尾", new Double(10)); 
		mDataset.setValue(" 运维",new Double(10)); 
		return mDataset;
	}
}
下面是添加一些属性的设置包括背景色、输出成图片格式等等

import java.awt.Color;
import java.awt.Font;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.labels.StandardPieToolTipGenerator;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;

public class Pie {
	/**
	 * @param args
	 */
	public static void main(String[] args) 
	{	
		//设置数据源	
		PieDataset mDataset = GetDataset();	
		//建立图表
		JFreeChart mChart = ChartFactory.createPieChart3D("项目状态分布", mDataset, true, true, false);		
		
		整体图表的设置/
		//设置背景为白色(默认为灰色)
		mChart.setBackgroundPaint(Color.white);
		//设置图表题的字体
		Font mFont = new Font("黑体",Font.CENTER_BASELINE, 20); 
		//设置标题
		TextTitle mTextTitle = new TextTitle("项目状态分布");
		mTextTitle.setFont(mFont);	//标题设置字体
		mChart.setTitle(mTextTitle);	//图表设置标题
		
		//mChart.setTitle(new TextTitle("项目状态分布", new Font("黑体",Font.CENTER_BASELINE, 20)));
		//getLegend获取饼图底部图例,并设置字体
		mChart.getLegend().setItemFont(new Font("宋体", Font.ROMAN_BASELINE, 15));
		/选做设置
		//设置副标题
		//mChart.addSubtitle(new TextTitle("子标题"));
		//设置字体边界模糊,默认为true,即模糊
		//mChart.setTextAntiAlias(false);		
		
		绘制图表及设置///
		PiePlot3D mPiePlot = (PiePlot3D)mChart.getPlot();
		//以默认方式显示百分比
		//mPiePlot.setLabelGenerator(new StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));
		// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
		mPiePlot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(), new DecimalFormat("0.00%")));
		// 底部图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例 
		mPiePlot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})"));
		// 指定图片的透明度(0.0-1.0) 
		//mPiePlot.setBackgroundImageAlpha(1.0f);
		// 指定显示的饼图上圆形(false)还椭圆形(true) 默认为true
		mPiePlot.setCircular(true);
		//设置饼图标签字体
		mPiePlot.setLabelFont(new Font("宋体", Font.PLAIN, 15));
		选做设置///
		//设置饼图背景颜色,默认为LIGHT_GRAY
		mPiePlot.setBackgroundPaint(Color.ORANGE);
		
		
		//内置对象显示图表
		ChartFrame mChartFrame = new ChartFrame("项目状态分布", mChart);
		mChartFrame.pack();
		mChartFrame.setVisible(true);
		
		/*输出图片
		FileOutputStream fos = null;	
		try {
			fos = new FileOutputStream("E:\\项目状态分布.jpg");
			ChartUtilities.writeChartAsJPEG(fos, mChart, 800, 500);
			fos.close();
			System.out.println("完成!");
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		*/
	}
	public static PieDataset GetDataset()
	{
		DefaultPieDataset mDataset = new DefaultPieDataset();		
		mDataset.setValue(" 市场前期", new Double(10)); 
		mDataset.setValue(" 立项", new Double(15)); 
		mDataset.setValue(" 计划", new Double(10)); 
		mDataset.setValue(" 需求与设计", new Double(10)); 
		mDataset.setValue(" 执行控制", new Double(35)); 
		mDataset.setValue(" 收尾", new Double(10)); 
		mDataset.setValue(" 运维",new Double(10)); 
		return mDataset;
	}
}

参考文章: 

http://www.douban.com/group/topic/3607365/ 

http://www.cnblogs.com/xingyun/archive/2012/02/05/2339237.html


本文链接: http://www.dtmao.cc/news_show_1100415.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?