饼状图实例 Java

简介: 【2月更文挑战第6天】

饼状图实例 Java

在数据可视化中,饼状图是一种常用的图表类型,通过展示不同数据类别的占比,直观地呈现数据分布的情况。在Java中,我们可以使用一些第三方库来方便地实现饼状图的绘制,比如使用JFreeChart库。

准备工作

首先,我们需要添加JFreeChart库的依赖,可以通过Maven或手动添加jar包的方式引入相关的库文件。这里以Maven为例,在pom.xml文件中加入以下依赖:

xmlCopy code
<dependency>
    <groupId>org.jfree</groupId>
    <artifactId>jfreechart</artifactId>
    <version>1.5.3</version>
</dependency>

创建饼状图

接下来,我们来创建一个简单的饼状图实例。假设我们有一个数据集,表示某个销售员在一年内的销售额占比情况,数据格式如下:

销售员

销售额占比

张三

30%

李四

40%

王五

20%

赵六

10%

我们将使用JFreeChart来绘制一个对应的饼状图。

首先,我们需要创建一个PieDataset对象,用于存储数据集。

javaCopy code
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
public class PieChartExample {
    public static void main(String[] args) {
        PieDataset dataset = createDataset();
    }
    private static PieDataset createDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("张三", 30);
        dataset.setValue("李四", 40);
        dataset.setValue("王五", 20);
        dataset.setValue("赵六", 10);
        return dataset;
    }
}

接下来,我们需要创建一个JFreeChart对象,用于绘制饼状图。

javaCopy code
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PiePlot;
public class PieChartExample {
    public static void main(String[] args) {
        PieDataset dataset = createDataset();
        JFreeChart chart = createChart(dataset);
        ChartFrame frame = new ChartFrame("销售额占比", chart);
        frame.pack();
        frame.setVisible(true);
    }
    private static PieDataset createDataset() {
        // 创建数据集
        // ...
        return dataset;
    }
    private static JFreeChart createChart(PieDataset dataset) {
        JFreeChart chart = ChartFactory.createPieChart(
                "销售额占比",
                dataset,
                true,
                true,
                false
        );
        // 自定义饼状图样式
        PiePlot plot = (PiePlot) chart.getPlot();
        plot.setSectionOutlinesVisible(false);
        plot.setLabelFont(new Font("SansSerif", Font.PLAIN, 12));
        plot.setCircular(true);
        plot.setLabelGap(0.02);
        
        return chart;
    }
}

在上述代码中,我们使用ChartFactory.createPieChart()方法创建了一个饼状图,并指定了图表的标题、数据集、是否显示图例等属性。 为了美化饼状图的样式,我们还对PiePlot对象进行了一些自定义设置,例如去除区域轮廓线、设置标签字体、设置为圆形图等。 最后,我们创建了一个ChartFrame对象,并将图表添加到其中,以便显示饼状图窗口。 现在,我们运行程序,就可以看到绘制出的饼状图窗口,展示了销售员的销售额占比情况。 这只是一个简单的饼状图示例,你可以根据需要自定义数据集和图表样式,以及添加更多交互性和细节的功能。

饼状图来显示某个在线商店的商品销售占比:

javaCopy code
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;
import org.jfree.data.general.PieDataset;
import java.awt.*;
import java.text.DecimalFormat;
public class PieChartExample {
    public static void main(String[] args) {
        PieDataset dataset = createDataset();
        JFreeChart chart = createChart(dataset);
        ChartFrame frame = new ChartFrame("商品销售占比", chart);
        frame.pack();
        frame.setVisible(true);
    }
    private static PieDataset createDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("电子产品", 40);
        dataset.setValue("服装鞋帽", 30);
        dataset.setValue("家居用品", 20);
        dataset.setValue("食品饮料", 10);
        return dataset;
    }
    private static JFreeChart createChart(PieDataset dataset) {
        JFreeChart chart = ChartFactory.createPieChart(
                "商品销售占比",
                dataset,
                true,
                true,
                false
        );
        PiePlot plot = (PiePlot) chart.getPlot();
        plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}: {1} ({2})",
                new DecimalFormat("0"), new DecimalFormat("0%")));
        plot.setSectionPaint("电子产品", new Color(0, 128, 128));
        plot.setSectionPaint("服装鞋帽", new Color(255, 99, 71));
        plot.setSectionPaint("家居用品", new Color(0, 0, 255));
        plot.setSectionPaint("食品饮料", new Color(255, 215, 0));
        return chart;
    }
}

在上述示例代码中,我们使用createDataset()方法创建了一个包含不同商品占比的数据集,分别是电子产品、服装鞋帽、家居用品和食品饮料。 在createChart()方法中,我们对饼状图的样式进行了一些自定义设置。例如,我们使用StandardPieSectionLabelGenerator类来显示每个扇区的标签,包括商品类别、销售额和百分比。 我们还使用setSectionPaint()方法为每个商品类别指定不同的颜色,以便在饼状图中进行区分。 最后,我们创建了一个ChartFrame对象,并将饼状图添加到其中,以显示商品销售占比的图表窗口。

org.jfree.data.general.DefaultPieDataset是JFreeChart库中的一个类,用于存储饼状图的数据集。它实现了org.jfree.data.general.PieDataset接口,并提供了一些用于管理和访问饼状图数据的方法。 主要功能和方法:

  1. 添加数据:setValue(Comparable key, Number value)方法用于向数据集中添加一个数据项,该数据项由一个键值对表示,其中键是一个Comparable类型的对象,通常是一个字符串,表示数据项的标签,值是一个Number类型的对象,表示数据项的值。
  2. 移除数据:remove(Comparable key)方法用于从数据集中移除指定键的数据项。
  3. 获取数据:getValue(Comparable key)方法用于获取指定键的数据项的值。
  • getKeys()方法返回数据集中所有数据项的键的集合。
  • getKeys().toArray()方法将数据项的键转换为数组。
  1. 数据排序:sortByName()方法按照键的字母顺序对数据项进行排序。
  2. 数据清空:clear()方法用于清空整个数据集,移除所有数据项。
  3. 数据集监听器: 数据集支持添加和移除数据集监听器,以便在数据发生变化时通知监听器执行相应操作。 除了以上列出的主要方法之外,DefaultPieDataset还提供了其他辅助方法,如getItemCount()用于获取数据集中数据项的数量,getKeys().size()getKeys().toArray().length效果相同。 示例代码:
javaCopy code
import org.jfree.data.general.DefaultPieDataset;
public class DefaultPieDatasetExample {
    public static void main(String[] args) {
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("Apple", 45);
        dataset.setValue("Banana", 30);
        dataset.setValue("Orange", 25);
        
        // 获取数据项的值
        Number appleValue = dataset.getValue("Apple");
        
        // 获取数据项的键的集合
        Comparable<?>[] keys = dataset.getKeys().toArray(new Comparable<?>[0]);
        
        // 移除数据项
        dataset.remove("Orange");
        
        // 清空整个数据集
        dataset.clear();
    }
}

在上述示例代码中,我们创建了一个DefaultPieDataset对象,并使用setValue()方法向数据集中添加了三个数据项:Apple、Banana和Orange,它们的值分别是45、30和25。然后,我们演示了如何使用其他方法获取、移除和清空数据项。

相关文章
|
14小时前
|
Java
java中递归实例
java中递归实例
18 0
|
14小时前
|
Java
【专栏】Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
|
14小时前
|
Java ice
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
【Java开发指南 | 第九篇】访问实例变量和方法、继承、接口
10 4
|
14小时前
|
存储 缓存 Java
【Java开发指南 | 第六篇】Java成员变量(实例变量)、 类变量(静态变量)
【Java开发指南 | 第六篇】Java成员变量(实例变量)、 类变量(静态变量)
9 2
|
14小时前
|
Java
代码实例演示Java字符串与输入流互转
代码实例演示Java字符串与输入流互转
|
14小时前
|
并行计算 Java API
【专栏】Java 8的Lambda表达式增强了函数式编程,允许以匿名函数形式传递行为
【4月更文挑战第27天】Java 8的Lambda表达式增强了函数式编程,允许以匿名函数形式传递行为。其基本语法`(params) -> expression/statements`,类型由参数推断,可引用final或effectively final的外部变量。Lambda广泛应用于集合操作(如Stream API)、并行流处理和GUI事件处理,简化代码并提高效率。通过实例,展示了Lambda在集合筛选、并行计算和事件处理中的应用,从而提高开发质量和效率。
|
14小时前
|
Java Shell
Java 21颠覆传统:未命名类与实例Main方法的编码变革
Java 21颠覆传统:未命名类与实例Main方法的编码变革
16 0
|
14小时前
|
存储 Java 数据处理
Java IO 流在数据处理中的应用实例
【4月更文挑战第4天】Java IO 流在数据处理中扮演关键角色,如在学生信息管理系统中读取和保存信息。通过FileInputStream和FileWriter进行文件读写,实现数据的持久化。BufferedReader和BufferedWriter提供缓冲提升性能,DataInputStream和DataOutputStream处理基本数据类型。流还可用于文件复制、编码转换及数据传输,确保高效稳定的数据处理。理解并选择合适流类型是实现可靠程序的关键。
|
14小时前
|
Java
java面向对象高级分层实例_测试类(main方法所在的类)
java面向对象高级分层实例_测试类(main方法所在的类)
11 1
|
14小时前
|
Java 数据库
java面向对象高级分层实例_数据库操作类
java面向对象高级分层实例_数据库操作类
12 1