JFreeChart最新版本1.0.8a的研究系列——生成饼图

生成饼图

实现步骤

1)创建用于图形生成所要的数据集对象。
实例化类DefaultPieDataset dataset = new DefaultPieDataset()。然后利用DefaultPieDataset类提供的setValue(value1,value2)方法,把从数据存入DefaultPieDataset对象。其中value1是数据名称、value2是数据值。
2)创建图形对象。
实例化JFreeChart chart = ChartFactory.createPieChart3D(title, dataset, true, true, false)createPieChart3D方法是生成3D饼图的方法,createPieChart方法是生成平面饼图的方法。其中title代表图形的标题、dataset就是DefaultPieDataset对象的实例,第一个true表示是否显示图例,第二个true测试下来未明,第三个true为是否显示鼠标指向提示。
3)设置图形显示的属性。
通过Pieplot plot = (PiePlot) chart.getPlot()方法获取plot对象,对图像设置相关属性。
4)生成图形
String filename = ServletUtilities.saveChartAsPNG(JPEG)(chart, 800, 600, info, session);
主要用于把图形对象以图片的形式保存为临时文件。其中的chart就是JFreeChart对象的实例。该方法返回一个文件名。
ChartUtilities.saveChartAsJPEG(new File("D:/Downloads/a.jpg"),chart, 800, 600);
用于把图形对象保存为指定的图片文件,该方法无返回值。

实例应用
package jfreechar.test;
import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.general.DefaultPieDataset;

/***/ /**
*测试生成饼图实例
*
*
@author左杰
*
*/

public class PieChartTest ... {
/***//**
*创建Dataset,用数据源中的数据填充
*
*
@return
*/

publicDefaultPieDatasetgetData()...{
DefaultPieDatasetdataset
=newDefaultPieDataset();
dataset.setValue(
"短信",10);
dataset.setValue(
"上网",20);
dataset.setValue(
"本地通话",30);
dataset.setValue(
"长途",50);
returndataset;
}


/***//**
*创建图表主对象JFreechart,并设置图像显示
*
*
@return
*/

publicJFreeChartcreatePieChart()...{
//创建图表主对象JFreechart
JFreeChartchart=ChartFactory.createPieChart("话费统计",getData(),true,
true,true);
//创建3D状图像
//JFreeChartchart=ChartFactory.createPieChart3D("话费统计",getData(),true,
//true,true);
//设置图像的背景颜色
chart.setBackgroundPaint(Color.pink);
//边界线条是否可见
chart.setBorderVisible(false);

//设置图形显示属性
//获得图表显示对象,3D状的
//PiePlot3Dplot=(PiePlot3D)chart.getPlot();
//获得图表显示对象
PiePlotplot=(PiePlot)chart.getPlot();

//图片中显示百分比:自定义方式,{0}表示选项,{1}表示数值,{2}表示所占比例,小数点后两位
plot.setLabelGenerator(newStandardPieSectionLabelGenerator(
"{0}={1}占{2}",newDecimalFormat("00.0"),newDecimalFormat(
"0.00%")));
//图例显示百分比:自定义方式,{0}表示选项,{2}表示数值
plot.setLegendLabelGenerator(newStandardPieSectionLabelGenerator(
"{0}={2}",newDecimalFormat("00.0"),
newDecimalFormat("0.00%")));
//分离图形,只对平面图有效,3D的不可以
plot.setExplodePercent("长途",0.4);
//设置指定块的颜色
plot.setSectionPaint("长途",Color.ORANGE);
//指定图片的透明度(0.0-1.0)
plot.setForegroundAlpha(0.5f);
//分类标签的字体
plot.setLabelFont(newFont("sim-hei",Font.ITALIC,14));
//边界线条是否可见
plot.setSectionOutlinesVisible(false);
//设置图形区域背景颜色
plot.setBackgroundPaint(Color.white);
returnchart;
}


/***//**
*生成图形,保存图像到临时文件,并返回文件名
*
*
@paramchart
*JFreeChart对象实例
*
@paramw
*图像宽度
*
@paramh
*图像高度
*
@paramsession
*会话session
*
@return
*/

publicStringgetFileName(JFreeChartchart,intw,inth,HttpSessionsession)...{
//生成图形,保存图像到临时文件,并返回文件名
StringfileName="";
StandardEntityCollectionsec
=newStandardEntityCollection();
ChartRenderingInfoinfo
=newChartRenderingInfo(sec);
try...{
fileName
=ServletUtilities.saveChartAsPNG(chart,w,h,info,session);
}
catch(Exceptione)...{
System.out.println(
"Exception-"+e.toString());
fileName
="public_error_500x300.png";
}

returnfileName;
}


/***//**
*生成图形,保存到指定文件,文件类型为png
*
*
@paramfileName
*指定保存文件的路径及文件名
*
@paramchart
*JFreeChart对象实例
*
@paramw
*图像宽度
*
@paramh
*图像高度
*/

publicvoidSaveFileAsPNG(StringfileName,JFreeChartchart,intw,inth)...{
//生成图形,保存到指定文件,文件类型为png
try...{
ChartUtilities.saveChartAsPNG(
newFile(fileName),chart,w,h);
}
catch(IOExceptione)...{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}

}


/***//**
*生成图形,保存到指定文件,文件类型为jpg
*
*
@paramfileName
*指定保存文件的路径及文件名
*
@paramchart
*JFreeChart对象实例
*
@paramw
*图像宽度
*
@paramh
*图像高度
*/

publicvoidSaveFileAsJPEG(StringfileName,JFreeChartchart,intw,inth)...{
//生成图形,保存到指定文件,文件类型为jpg
try...{
ChartUtilities.saveChartAsPNG(
newFile(fileName),chart,w,h);
}
catch(IOExceptione)...{
//TODOAuto-generatedcatchblock
e.printStackTrace();
}

}


publicstaticvoidmain(String[]args)...{
PieChartTestp
=newPieChartTest();
JFreeChartchart
=p.createPieChart();
//保存为图像文件
p.SaveFileAsPNG("d://piechat.png",chart,800,600);
//显示在GUI上
ChartFrameframe=newChartFrame("话费",chart);
frame.pack();
frame.setVisible(
true);
}

}
这个执行后显示的是平面饼图,如果想实现3D饼图,只需要在创建JFreeChart对象时使用ChartFactory.createPieChart3D方法。
运行结果如下:
平面饼图 3D饼图
<!-- <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"> <rdf:Description rdf:about="http://192.168.0.26/pages/viewpage.action?pageId=4882499" dc:identifier="http://192.168.0.26/pages/viewpage.action?pageId=4882499" dc:title="生成饼图" trackback:ping="http://192.168.0.26/rpc/trackback/4882499" /> </rdf:RDF> --><!-- Root decorator: all decisions about how a page is to be decorated via the inline decoration begins here. --><!-- Switch based upon the context. However, for now, just delegate to a decorator identified directly by the context. -->
还有很多相关的属性,大家可以研究一下
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 jfreechart 生成饼图时,可以通过设置渲染器(Renderer)来调整区域的颜色样式。以下是一个简单的示例: ```java import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.chart.plot.PiePlot; import org.jfree.data.general.DefaultPieDataset; import org.jfree.chart.renderer.category.StandardPieSectionLabelGenerator; import java.awt.Color; public class PieChartExample { public static void main(String[] args) { // 创建数据集 DefaultPieDataset dataset = new DefaultPieDataset(); dataset.setValue("A", 20); dataset.setValue("B", 30); dataset.setValue("C", 50); // 创建饼图并设置渲染器 JFreeChart chart = ChartFactory.createPieChart("Pie Chart Example", dataset, true, true, false); PiePlot plot = (PiePlot) chart.getPlot(); plot.setSectionPaint("A", new Color(255, 0, 0)); // 设置 A 区域的颜色为红色 plot.setSectionPaint("B", new Color(0, 255, 0)); // 设置 B 区域的颜色为绿色 plot.setSectionPaint("C", new Color(0, 0, 255)); // 设置 C 区域的颜色为蓝色 plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} ({2})")); // 设置标签格式 // 显示饼图 ChartFrame frame = new ChartFrame("Pie Chart Example", chart); frame.pack(); frame.setVisible(true); } } ``` 在上面的示例中,通过调用 `setSectionPaint` 方法来设置各区域的颜色,可以传入一个 `Color` 对象或者表示颜色的字符串。同时也可以通过 `setSectionOutlinePaint` 方法设置区域的边界颜色。另外,还可以通过 `setLabelGenerator` 方法来设置标签的格式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值