JFreeChart生成饼形图(3) (转自 JSP开发技术大全)

14.3 利用JFreeChart生成饼形图

通过JFreeChart插件,即可以生成普通效果的饼形图,也可以生成3D效果的饼形图;如果想生成普通效果的饼形图,需要通过工厂类ChartFactory的createPieChart()方法获得JFreeChart类的实例,如果想生成3D效果的饼形图,需要通过工厂类ChartFactory的createPieChart3D()方法获得JFreeChart类的实例,这两个方法的入口参数是完全相同的,各个入口参数的类型及功能如表14.3所示。

表14.3                                      绘制饼形图方法的入口参数类型及功能

参 数 序 号

入 口 参 数

参 数 功 能

1

String title

图表标题

2

PieDataset dataset

绘图数据集

3

boolean legend

用于设定是否显示图例

4

boolean tooltips

用于设定是否采用标准生成器

5

boolean urls

用于设定是否包生成链接

绘制饼形图时,需要通过DefaultPieDataset数据集封装数据,该数据集中的每一个元素是由一组键值对组成的,这与Map集合有些类似,DefaultPieDataset数据集通过setValue()方法添加数据,setValue()方法有两个重载方法,均有两个入口参数,并且每个参数的含义是相同的,第一个入口参数为图例名称,第二个入口参数统计数据,它们的具体定义如下:

public void setValue(Comparable key, Number value) {

this.data.setValue(key, value);

fireDatasetChanged();

}

public void setValue(Comparable key, double value) {

setValue(key, new Double(value));

}

可以通过绘图区对象PiePlot的setForegroundAlpha(float alpha)方法,实现饼图的透明效果,入口参数alpha的取值范围在0.0和1.0之间,当为0.0时,将不显示饼图,当为1.0时,则不存在透明效果,当超出该范围时,将抛出如下异常:

java.lang.IllegalArgumentException: alpha value out of range

 示例14-03 编程类图书年销售额百分比饼形图分析

下面来看一个绘制饼形图的例子,该例绘制的饼形图效果如图14.4和图14.5所示。

            

图14.4 普通效果的饼形图                              图14.5 3D效果的饼形图

代码14-03 光盘位置:光盘\mingrisoft\14\sl\03

本示例使用的模拟绘图数据如下:

String[] cutline;     // 图例

Double[] data;     // 绘图数据

this.cutline = new String[] { "ASP", "JSP", "PHP", "Hibernate", "Spring", "数据库" };

this.data = new Double[cutline.length];

for (int i = 0; i < data.length; i++) {

data[i] = 1 + Math.random() * 100;

}

创建DefaultPieDataset数据集的代码如下:

DefaultPieDataset dataset = new DefaultPieDataset();

for (int i = 0; i < cutline.length; i++) {

dataset.setValue(cutline[i], data[i]);

}

创建绘制3D效果饼形图的JFreeChart实例,代码如下:

JFreeChart chart = ChartFactory.createPieChart3D(chartTitle,      // 图表标题

dataset,      // 绘图数据集

False,      // 设定是否显示图例

False,     // 设定是否显示图例名称

False);     // 设定是否生成链接

    说明:这里绘制的是图14.5所示的3D效果图,如果想绘制图14.4所示的普通效果图,只需将createPieChart3D()方法改为createPieChart()方法。

当需要在图片上显示中文时,建议不要使用反锯齿功能,这样能够保证汉字的清晰度,代码如下:

chart.setAntiAlias(False);

可以自行定义图表标题的字体、样式、大小和颜色等,代码如下:

TextTitle title = chart.getTitle();

title.setFont(new Font("汉真广标", Font.BOLD, 21));

title.setPaint(Color.RED);

下面通过绘图区对象设置饼状图的绘制方向,可以按顺时针方向绘制,也可以按逆时针方向绘制,以及开始绘制第一段圆弧的角度,关键代码如下:

plot.setDirection(Rotation.ANTICLOCKWISE);

plot.setStartAngle(90);

可以设置饼形图的外观效果,例如圆形(True)或椭圆形(False),默认为圆形,建议在绘制3D效果图时将其设为False,关键代码如下;

plot.setCircular(False);

下面让饼形图实现透明效果,代码如下:

plot.setForegroundAlpha(0.8f);

JFreeChart生成饼形图(3) (转自 JSP开发技术大全)的更多相关文章

  1. JFreeChart生成柱形图(2) (转自 JSP开发技术大全)

    JFreeChart生成柱形图(2) (转自 JSP开发技术大全) 14.2 利用JFreeChart生成柱形图14.2.1 利用DefaultCategoryDataset数据集绘制柱形图 通过JF ...

  2. JFreeChart生成饼形图(3)11 (转自 JSP开发技术大全)

    FreeChart生成饼形图(3) (转自 JSP开发技术大全) 14.3 利用JFreeChart生成饼形图 通过JFreeChart插件,即可以生成普通效果的饼形图,也可以生成3D效果的饼形图:如 ...

  3. 利用JFreeChart生成时序图(6) (转自 JSP开发技术大全)

    利用JFreeChart生成时序图(6) (转自 JSP开发技术大全) 14.6 利用JFreeChart生成时序图 通过JFreeChart插件只能生成普通效果的时序图,利用工厂类ChartFact ...

  4. 利用JFreeChart生成区域图 (5) (转自 JSP开发技术大全)

    利用JFreeChart生成区域图 (5) (转自 JSP开发技术大全) 14.5 利用JFreeChart生成区域图 通过JFreeChart插件只能生成普通效果的区域图,利用工厂类ChartFac ...

  5. 利用JFreeChart生成折线图 (4) (转自 JSP开发技术大全)

    利用JFreeChart生成折线图 (4) (转自 JSP开发技术大全) 14.4 利用JFreeChart生成折线图 通过JFreeChart插件,既可以生成普通效果的折线图,也可以生成3D效果的折 ...

  6. 利用JFreeChart生成组合图表 (8) (转自 JSP开发技术大全)

    利用JFreeChart生成组合图表 (8) (转自 JSP开发技术大全) 14.8 利用JFreeChart生成组合图表  实例位置:光盘\mingrisoft\14\dxyy\02 通过JFree ...

  7. 利用JFreeChart生成多轴图表(7) (转自 JSP开发技术大全)

    利用JFreeChart生成多轴图表(7) (转自 JSP开发技术大全) 14.7 利用JFreeChart生成多轴图表 通过JFreeChart插件还可以生成拥有多个坐标轴的图表,简称多轴图表.在生 ...

  8. JFreeChart基础(1) (转自 JSP开发技术大全)

    JFreeChart基础(1) (转自 JSP开发技术大全) JFreeChart是一个Java开源项目,是一款优秀的Java图表生成插件,它提供了在Java Application.Servlet和 ...

  9. Java Web开发技术教程入门-初识动态网页

    这段时间学校搞了一个"阅战阅勇"的阅读活动,奖品还是挺丰富的~于是,奔着这些奖品,我去图书馆借了这本<Java Web开发技术教程>.一是为了那些丰富的奖品,二是为了回 ...

随机推荐

  1. POJ2421 Constructing Roads

    Constructing Roads 这道题很水,就是一个裸的最小生成树,最不过把已经连接的节点的值再设为0. 代码: #include<cstdio> #include<cstri ...

  2. oracle等待事件相关查询

    --------------------------查询数据库等待时间和实际执行时间的相对百分比--------------------- select *   from v$sysmetric a ...

  3. [codeforces724D]Dense Subsequence

    [codeforces724D]Dense Subsequence 试题描述 You are given a string s, consisting of lowercase English let ...

  4. 【最小费用最大流】N. April Fools' Problem (medium)

    http://codeforces.com/contest/802/problem/N [题解] 方法一: #include<bits/stdc++.h> using namespace ...

  5. poj1975

    #include<stdio.h> #include<string.h> #define N 100 int map[N][N]; int main() { int t,n,m ...

  6. Error:Uninitialized object exists on backward branch 70 Exception Details:

    网上下载了一个demo,编译出现如下错误: Gradle sync failed: Uninitialized object exists on backward branch 70 Exceptio ...

  7. 只有代码不会撒谎,如何通过Spring boot源码查看其对于各个框架的默认配置

    我发现很多开发对于看源码都有种恐惧心理,其实不必这样,大部分优秀的源码写的都挺直观的,很多时候,你在搜索引擎上搜到的一些东西并不一定是对的,但源码肯定造不了假,毕竟不管你怎么想,它就在那里,该是什么意 ...

  8. [NOIP2002] 普及组

    产生数 预处理出一个数能变成多少种数,然后遍历原串的每一位,累乘方案数即可. 需要用到高精度. /*By SilverN*/ #include<iostream> #include< ...

  9. delete NULL

    面试某公司的时候,某技术主管说你这delete前没有判断指针是否为NULL,当时我就…… 看来这是个传说中的好习惯,每当delete一个指针的时候,要先判断是不是NULL.比如: if ( p != ...

  10. 找了两个小时的错误,net.sf.json.JSONException: JSON keys cannot be null.

    因为数据库里面一条记录插入的是NULL,所以导致报了net.sf.json.JSONException: JSON keys cannot be null,找了半天都找不出来问题所在,其他人又都可以启 ...