今天抽空,也总结了一下3D饼图的画法,这里大致先写个思路。
1、取得数据集所需数据源。3D饼图的数据集通常用DefaultPieDataset,下面将我的代码粘一下:
private static PieDataset createDataset(double[] datas, String foodfect,
String bmr, String daily, String sport) {
// String foodfect = "食物热效应";
// String bmr = "基础代谢率";
// String daily = "日常活动消耗的能量";
// String sport = "额外运动消耗";
double fectper = datas[3] / datas[1] * 100;
double bmrper = datas[2] / datas[1] * 100;
double dailper = datas[4] / datas[1] * 100;
double sportper = datas[7] / datas[1] * 100;
if (fectper >= 0 && bmrper >= 0 && dailper >= 0 && sportper >= 0) {
fectper = Double.parseDouble(BarChartData
.formAtCaloriepercent(fectper));
bmrper = Double.parseDouble(BarChartData
.formAtCaloriepercent(bmrper));
dailper = Double.parseDouble(BarChartData
.formAtCaloriepercent(dailper));
sportper = Double.parseDouble(BarChartData
.formAtCaloriepercent(sportper));
}
DefaultPieDataset pset = new DefaultPieDataset();
pset.setValue(foodfect, -fectper);
pset.setValue(bmr, -bmrper);
pset.setValue(daily, -dailper);
pset.setValue(sport, -sportper);
return pset;
}
2、调用画图API
/**
* 饼状图
* @param dataset
* 数据集
* @param chartTitle
* 图标题
* @param charName
* 生成图的名字
* @param pieKeys
* 分饼的名字集
* @return
*/
public static JFreeChart createValidityComparePimChar(PieDataset dataset,
String chartTitle, String nodatamess) {
JFreeChart chart = ChartFactory.createPieChart3D("Pie Chart 3D Demo 3",
dataset, true, true, false);
PiePlot3D plot = (PiePlot3D) chart.getPlot();
plot.setStartAngle(290D);
plot.setDirection(Rotation.CLOCKWISE);
plot.setForegroundAlpha(0.5F);
plot.setNoDataMessage("No data to display");
// 使下说明标签字体清晰,去锯齿类似于的效果
chart.getRenderingHints().put(RenderingHints.KEY_TEXT_ANTIALIASING,
RenderingHints.VALUE_TEXT_ANTIALIAS_OFF);
// chart.setAntiAlias(false);
// 图片背景色
chart.setBackgroundPaint(Color.WHITE);
// 设置图标题的字体重新设置title
// 设置标题的颜色
TextTitle text = new TextTitle(chartTitle);
text.setPaint(new Color(102, 102, 102));
chart.setTitle(text);
plot.setBackgroundPaint(new Color(255, 253, 246));
plot.setOutlineStroke(new BasicStroke(1.5f));
plot.setMaximumLabelWidth(0.25d);
// 图片中显示百分比:默认方式
// 设置各色块的颜色
plot.setSectionPaint(0, new Color(87, 149, 117));
plot.setSectionPaint(1, new Color(234, 162, 40));
plot.setSectionPaint(2, new Color(197, 180, 127));
plot.setSectionPaint(3, new Color(75, 178, 197));
plot.setSectionPaint(4, new Color(131, 149, 87));
plot.setShadowXOffset(1.0d);
plot.setIgnoreZeroValues(false);
plot.setStartAngle(90); // 设置旋转角度
plot.setDirection(Rotation.CLOCKWISE); // 设置旋转方向
plot.setForegroundAlpha(0.5f);
plot.setLabelLinkMargin(0.1);
plot.setSectionOutlinesVisible(false);
plot.setDepthFactor(0.1d);// 饼图的Z轴高度。
// 设置无数据时的信息
plot.setNoDataMessage(nodatamess);
plot.setNoDataMessageFont(new Font("", Font.BOLD, 14));
// 设置无数据时的信息显示颜色
plot.setNoDataMessagePaint(new Color(87, 149, 117));
// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
"{0} ={1}%", NumberFormat.getNumberInstance(),
new DecimalFormat("0.00%")));
// 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
"{0} ={1}%"));
plot.setLabelFont(new Font("SansSerif", Font.TRUETYPE_FONT, 12));
// 指定图片的透明度(0.0-1.0)
plot.setForegroundAlpha(0.65f);
return chart;
}
3、生成Chart图,返回图片URL
public static void drawPieChart(IrisIoInterface io, Log log,
double[] datas, String nodatamess, String foodfect, String bmr,
String daily, String sport) {
PieDataset dataset = createDataset(datas, foodfect, bmr, daily, sport);
JFreeChart chart = createValidityComparePimChar(dataset, "", nodatamess);
HttpServletRequest request = io.getRequest();
String filename = "";
String graphURL = "";
try {
filename = ServletUtilities.saveChartAsPNG(chart, 320, 177, null,
io.getSession());
graphURL = request.getContextPath() + "/displayChart?filename="
+ filename;
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log.error(e);
}
io.setData("filename1", filename, BeanShare.BEAN_SHARE_REQUEST);
io.setData("pieurl", graphURL, BeanShare.BEAN_SHARE_REQUEST);
}
现在就OK了,效果图:
分享到:
相关推荐
**JFreeChart库详解:创建3D曲线图、3D饼图和3D柱状图** JFreeChart是一个强大的Java图形库,它提供了多种图表类型,包括曲线图、饼图和柱状图,且支持2D和3D效果。本篇文章将深入探讨如何使用JFreeChart来创建这些...
除了这些基本图表,JFreeChart还支持其他类型的图表,如散点图、面积图、3D图表等,为开发者提供了丰富的选择。 在使用JFreeChart时,常常会配合jxl库来处理Excel数据。jxl是一个Java API,用于读写Microsoft Excel...
### Ireport 4.5.0 制作3D饼图详解 在现代数据分析与展示领域,图表的应用极为广泛,特别是在企业管理层面,管理者们希望通过直观的图表形式来快速理解复杂的数据,以便于进行准确的决策。JasperReport作为一款优秀...
**JFreeChart——柱状图与饼图详解** 在Java编程中,JFreeChart库是一个强大的图表绘制工具,它能够帮助开发者创建出多种类型的图表,包括柱状图、饼图等,广泛应用于数据分析和可视化展示。这篇博文中,我们将深入...
JFreeChart提供了丰富的定制选项,比如设置标签的方向、颜色、字体,甚至可以添加3D效果。 其次,柱状图是一种常用的统计图表,用于比较不同类别的数据量。JFreeChart提供了垂直柱状图和水平柱状图,可以通过设置...
JFreeChart是开源的Java类库,它提供了丰富的图表类型,如折线图、柱状图、饼图、散点图、甘特图等。它不仅支持静态图表,还能够动态更新数据,使得图表具有交互性。JFreeChart库的灵活性和易用性使其成为Java开发者...
在springboot的web项目上,利用jfreeChart+java+thymeleaf(thymeleaf也可以换成jstl)制作折线图,柱形图,3d柱形图,多组柱形图,圆饼图,如果要演示到web项目和页面上去的可以下载看看
JFreeChart是一个强大的Java图表库,它允许开发者创建多种类型的2D和3D图表,包括柱状图、饼状图、线形图、散点图等。在这个特定的案例中,我们关注的是“3D饼状图”的实现,这是一种用以展示数据比例关系的可视化...
例如,要创建一个3D饼状图,我们可以调用`ChartFactory.create3DPieChart()`方法,需要提供图表的标题、数据源、是否显示百分比以及是否反转饼图的顺序等参数。数据源通常是一个`PieDataset`对象,它可以是`...
2. 创建 PiePlot3D 对象,用于设置饼图的样式。 3. 使用 ChartFactory 创建饼图,passing in the dataset object. 4. 使用 ChartUtilities 将图表保存到文件中。 三、柱状图 柱状图是一种常见的图表类型,用于显示...
在本文中,我们将介绍如何在JSP(Java Server Pages)页面中读取数据库数据并将其整合成3D饼图进行显示。这一过程涉及到几个关键的步骤和知识点,包括数据库操作、使用JFreeChart库生成饼图、以及在Web应用中配置...
使用JFreeChart生成饼图,首先要创建一个Java程序,通过`ChartFactory.createPieChart()`方法,传入饼图的标题、数据集、是否显示图例、工具提示和详细信息标签等参数。例如: ```java JFreeChart chart = ...
2. **3D饼状图的创建**:JFreeChart支持2D和3D饼图,3D效果增加了图表的视觉吸引力。你需要学习如何配置图表参数,如角度、深度,来实现三维效果。 3. **数据绑定**:将业务数据与图表关联,这通常涉及到数据结构的...
JFreeChart 是一个强大的 Java 图表库,用于生成各种类型的图表,包括饼图、柱状图、线图、区域图、分布图、混合图和甘特图等。它支持导出为 PNG 和 JPG 图片格式,使得在 Java 应用程序中集成数据可视化变得非常...
6. **其他高级特性**:JFreeChart还支持3D图表、组合图、热力图等多种图表类型,以及自定义轴标签、图例、背景色等。 在"jfreechart_demo.zip"中,你可能会找到如何设置数据源(如数组、列表或数据库查询结果)、...
JFreeChart支持饼图(2D和3D)、条形图(水平和垂直、规则和堆叠)、线图、散点图、时间序列图、高低开闭图、烛台图、甘特图、组合图、温度计、刻度盘等。JFreeChart可以用于客户端和服务器端应用程序。这个项目是由...
### JFreeChart学习总结 #### 一、为什么学习JFreeChart? 随着互联网技术的飞速发展,越来越多的应用程序转向了Web平台。这不仅包括传统的静态网页,也涵盖了那些需要复杂数据展示的应用,如报表系统。然而,从...
以下是一段简单的代码示例,展示了如何使用JFreeChart生成一个3D饼图: ```java import org.jfree.chart.ChartFactory; import org.jfree.chart.JFreeChart; import org.jfree.data.general.DefaultPieDataset; ...