JFreeChart—— 饼状图

该博客主要介绍了使用Java和JFreeChart绘制饼状图的相关内容。包含依赖包的准备、XML文件配置,还给出了在JSP中引用的示例,展示了平面图和3D图的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 依赖包


2. XML 文件配置

    <servlet>
        <servlet-name>DisplayChart</servlet-name>
        <servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>DisplayChart</servlet-name>
        <url-pattern>/DisplayChart</url-pattern>
    </servlet-mapping>


 3. 示例

3.1  平面图

package com.zth;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
import javax.servlet.http.HttpSession;
import java.awt.*;
import java.text.NumberFormat;

/**
 * @author zth
 * @Date 2019-05-24 23:13
 */
public class PieChart01 {
    public static String getPieChart(HttpSession session) throws Exception{
        DefaultPieDataset dataset = new DefaultPieDataset();

        dataset.setValue("java",0.15876);
        dataset.setValue("C",0.12424);
        dataset.setValue("python",0.07574);

        dataset.setValue("其他",0.64126);

        JFreeChart chart = ChartFactory.createPieChart("编程语言排行",dataset,true,true,true);

        // 副标题
        chart.addSubtitle(new TextTitle("2019年2月"));
        PiePlot piePlot = (PiePlot)chart.getPlot();
        piePlot.setLabelFont(new Font("宋体",0,11));
        // 设置饼图是圆的(true),还是椭圆的(false);默认为true
        piePlot.setCircular(true);
        // 没有数据的时候显示的内容
        piePlot.setNoDataMessage("无数据显示");

        // {0} 表示选项, {1} 表示数值, {2} 表示所占比例
        // {0}:({1}.{2})
        // {{0}={1}({2})
        StandardPieSectionLabelGenerator standarPieIG = new StandardPieSectionLabelGenerator(
                "{0}({2})", NumberFormat.getNumberInstance(), NumberFormat.getPercentInstance());
        piePlot.setLabelGenerator(standarPieIG);

        // 突出显示
        piePlot.setExplodePercent("java",0.15876);

        String fileName = ServletUtilities.saveChartAsPNG(chart,400,300,null,session);

        return fileName;
    }
}

jsp 引用:

<center>
    <%
        String fileName= PieChart01.getPieChart(session);
    %>
    <img src="DisplayChart?filename=<%=fileName %>"  border="0"/>
</center>

效果:

 

3.2 3D图

package com.zth;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.util.Rotation;

import javax.servlet.http.HttpSession;
import java.awt.*;
import java.text.NumberFormat;

/**
 * @author zth
 * @Date 2019-05-24 23:13
 */
public class PieChart02 {
    public static String getPieChart(HttpSession session) throws Exception{
        DefaultPieDataset dataset = new DefaultPieDataset();

        dataset.setValue("java",0.15876);
        dataset.setValue("C",0.12424);
        dataset.setValue("python",0.07574);

        dataset.setValue("其他",0.64126);

        JFreeChart chart = ChartFactory.createPieChart3D("编程语言排行",dataset,true,true,true);

        // 副标题
        chart.addSubtitle(new TextTitle("2019年2月"));
        PiePlot piePlot = (PiePlot)chart.getPlot();
        piePlot.setLabelFont(new Font("宋体",0,11));
        // 设置饼图是圆的(true),还是椭圆的(false);默认为true
        piePlot.setCircular(false);
        // 没有数据的时候显示的内容
        piePlot.setNoDataMessage("无数据显示");

        // {0} 表示选项, {1} 表示数值, {2} 表示所占比例
        // {0}:({1}.{2})
        // {{0}={1}({2})
        StandardPieSectionLabelGenerator standarPieIG = new StandardPieSectionLabelGenerator(
                "{0}({2})", NumberFormat.getNumberInstance(), NumberFormat.getPercentInstance());
        piePlot.setLabelGenerator(standarPieIG);

        PiePlot3D piePlot3D = (PiePlot3D) chart.getPlot();

        //设置开始角度
        piePlot3D.setStartAngle(120D);
        //设置方向为”顺时针方向“
        piePlot3D.setDirection(Rotation.CLOCKWISE);
        //设置透明度,0.5F为半透明,1为不透明,0为全透明
        piePlot3D.setForegroundAlpha(0.8F);

        String fileName = ServletUtilities.saveChartAsPNG(chart,400,300,null,session);

        return fileName;
    }
}

效果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值