Java创建柱状图及饼状图

Java创建图表其实还是很方便的,但是要引入相关的jar包。如下

  • jfreechart.jar
  • jcommon,jar
  • gnujaxp.jar
    其中最主要的是jfreechart.jar。
    下面就让我们先看看创建的图标的运行结果吧。


    是不是感觉很生动形象,一目了然呢?


下面让我们一一拉进行分析吧首先是柱状图
我已经在代码中做好了注释,可以直接拿过来使用。

package mytest;

import java.awt.FlowLayout;
import java.awt.Font;
import java.io.File;
import java.io.IOException;

import javax.swing.JFrame;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.Dataset;

public class BarChartDemo {

    private ChartPanel panel;

    /**
     * 在柱状图中创建表格的步骤如下: 1、创建表格chart,需要注意相关参数的含义, 2、传进去的数据集是CategoryDataset格式
     * 3、获得表格区域块,设置横轴,纵轴及相关字体(防止出现乱卡的状况)
     * 4、设置chart的图例legend,并设置条目的字体格式(同样是为了防止出现乱码)
     */
    public BarChartDemo() {
        CategoryDataset dataset = (CategoryDataset) getDataset();
        JFreeChart chart = ChartFactory.createBarChart3D("学历信息统计", "横坐标",
                "纵坐标", dataset, PlotOrientation.VERTICAL, true, false, false);

        CategoryPlot plot = (CategoryPlot) chart.getCategoryPlot();
        CategoryAxis axis = plot.getDomainAxis();
        axis.setLabelFont(new Font("宋体", Font.BOLD, 20));
        axis.setTickLabelFont(new Font("宋体", Font.BOLD, 20));

        ValueAxis rangeAxis = plot.getRangeAxis();
        rangeAxis.setLabelFont(new Font("宋体", Font.BOLD, 20));

        chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 20));
        chart.getTitle().setFont(new Font("黑体", Font.ITALIC, 22));

        panel = new ChartPanel(chart, true);

        //下面是王章偶然看到的生成图表图片的方法
                File dir = new File("F:\\MyPicture\\");
                if (!dir.exists()) {
                    dir.mkdir();
                }
                String fName = String.valueOf(System.currentTimeMillis())+"BarChart.png";
                File file = new File("F:\\MyPicture\\", fName);
                try {
                    ChartUtilities.saveChartAsPNG(file, chart, 400, 250);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }//生成一个png图片
    }

    public ChartPanel getChartPanel() {
        return panel;
    }

    /**
     * 需要注意的是在向数据集中添加数据的时候 使用的是dataset.addValue()方法,而在饼状图的数据集添加数据的过程中,使用的是dataset.setValue()方法
     * 这一点应该尤其注意。以免出错!
     * @return
     */
    private static Dataset getDataset() {
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(1, "郭1", "大学");
        dataset.addValue(2, "郭2", "高中");
        dataset.addValue(3, "郭3", "高中");
        dataset.addValue(4, "郭4", "高中");
        dataset.addValue(5, "郭5", "初中");
        dataset.addValue(5, "郭6", "初中");
        dataset.addValue(4, "郭7", "初中");
        dataset.addValue(3, "郭8", "小学");
        dataset.addValue(2, "郭9", "幼儿园");
        dataset.addValue(1, "张10", "幼儿园");

        return dataset;
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setLayout(new FlowLayout());
        frame.add(new BarChartDemo().getChartPanel());
        frame.setSize(1000, 600);
        frame.setDefaultCloseOperation(0);
        frame.setLocationRelativeTo(null);
        frame.setVisible(true);
    }

}


然后是饼状图,里面的注释也是很到位的进行了解释

package mytest;

import java.awt.FlowLayout;
import java.awt.Font;
import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;

import javax.swing.JFrame;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.data.general.DefaultPieDataset;

public class PieChartDemo {

    ChartPanel panel;

    /**
     * 创建饼状图的步骤如下: 1、创建一个饼状的实例,注意传参的格式,还有需要注意的是此时的数据集应该是defaultPieDataset,
     * 而不是CategoryDataset格式 2、获得饼状图的所在区域 3、设置两个格式化的数据格式,为后面的床架饼状图的实例做基础
     * 4、细节方面是对无数据、零值、负值等情况的处理 5、最后就是设置在出现汉字的地方进行字体内容的设置了(同样的,这是为了防止出现乱码的状况)
     */
    public PieChartDemo() {
        DefaultPieDataset dataset = getDataset();

        JFreeChart chart = ChartFactory.createPieChart3D("学校占比情况", dataset,
                true, false, false);

        PiePlot piePlot = (PiePlot) chart.getPlot();
        DecimalFormat df = new DecimalFormat("0.00%");
        NumberFormat nf = NumberFormat.getInstance();

        StandardPieSectionLabelGenerator generator = new StandardPieSectionLabelGenerator(
                "{0} {2}",                   //获得StandardPieSectionLabelGenerator对象,生成的格式,{0}表示section名,
                //{1}表示section的值,{2}表示百分比。可以自定义
                nf, df);
        piePlot.setLabelGenerator(generator);// 设置百分比
        piePlot.setLabelFont(new Font("黑体", Font.ITALIC, 20));

        // 当饼状图内额米有数据时,作如下数据中设置
        piePlot.setNoDataMessage("此时并没有任何数据可用");
        piePlot.setCircular(false);
        piePlot.setLabelGap(0.02D);

        piePlot.setIgnoreNullValues(true);// 设置不显示空位
        piePlot.setIgnoreZeroValues(true);// 设置不显示负值或零值

        panel = new ChartPanel(chart, true);
        chart.getTitle().setFont(new Font("宋体", Font.BOLD, 18));
        chart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 20));

        //下面是王章偶然看到的生成图表图片的方法
        File dir = new File("F:\\MyPicture\\");
        if (!dir.exists()) {
            dir.mkdir();
        }
        String fName = String.valueOf(System.currentTimeMillis())+"pie.png";
        File file = new File("F:\\MyPicture\\", fName);
        try {
            ChartUtilities.saveChartAsPNG(file, chart, 400, 250);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }//生成一个png图片  

    }

    /**
     * 需要注意的是在向数据集中添加数据的时候调用的是dataset.setvalue()方法,而不是柱状图中的addValue()方法
     * 这一点应该尤其注意一下,以免在使用的时候出现错误
     * @return
     */
    private DefaultPieDataset getDataset() {
        DefaultPieDataset dataset = new DefaultPieDataset();
        dataset.setValue("郭1", 1);
        dataset.setValue("郭2", 2);
        dataset.setValue("郭3", 3);
        dataset.setValue("郭4", 4);
        dataset.setValue("郭5", 3);
        dataset.setValue("郭6", 2);
        dataset.setValue("郭7", 1);
        return dataset;
    }

    public ChartPanel getPieChartPanel() {
        return panel;
    }

    public static void main(String[] args) {
        JFrame frame = new JFrame();
        frame.setLayout(new FlowLayout());
        frame.add(new PieChartDemo().getPieChartPanel());
        frame.setSize(1000, 700);
        frame.setVisible(true);
    }

}


这里并没有创建折线图,大致的步骤和这两种图的创建相当。详细链接



总结:
java创建图表来对数据进行分析,使得数据的展示形式更加生动,具体。
这里我还得到了一个知识点,那就是利用相关方法,来实现对这种图集的生成操作,只需指定号生成图像的保存路径及保存名称即可实现。如下

//下面是王章偶然看到的生成图表图片的方法
        File dir = new File("F:\\MyPicture\\");
        if (!dir.exists()) {
            dir.mkdir();
        }
        String fName = String.valueOf(System.currentTimeMillis())+"pie.png";
        File file = new File("F:\\MyPicture\\", fName);
        try {
            ChartUtilities.saveChartAsPNG(file, chart, 400, 250);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }//生成一个png图片  


the end!

时间: 2024-08-02 14:22:51

Java创建柱状图及饼状图的相关文章

ASP.NET动态创建柱状图与饼状图

asp.net|饼状图|创建|动态|柱状图    做web项目开发,难免会遇到动态创建柱状图或饼型图.现在用.net技术实现动态的创建它们.由于本身比较喜欢足球,更是鲁能的球迷,所以就用了鲁能的主场球迷人数作为例子,请不要太惊奇! 一个人在西安的山东人希望鲁能可以提前夺冠!!呵呵,扯远了-- 动态创建柱状图与饼状图的前台HTML代码如下:  <body>    <form id="Form1" method="post" runat="s

Echarts柱状图,饼状图,折线图案例

在使用Echarts之前需要做的工作是引入Echarts所需的js: <script type="text/javascript" src="${scriptsPath}/echarts/echarts.min.js" charset="utf-8"></script> 定义要在那个div区域显示图形:  <div class="similarity-sentence" id="simi

jQuery.Highcharts.js绘制柱状图饼状图曲线图_jquery

在数据统计和分析业务中,有时会遇到客户需要在一个图表中将柱状图.饼状图.曲线图的都体现出来,即可以从柱状图中看出具体数据.又能从曲线图中看出变化趋势,还能从饼状图中看出各部分数据比重.Highcharts可以轻松实现三图合一的效果. 复制代码 代码如下: var chart;             $(document).ready(function() {                 chart = new Highcharts.Chart({                     c

PHP+mysql+Highcharts生成饼状图_jquery

Mysql 首先我们建一张·chart_pie·表作为统计数据. -- -- 表的结构 `chart_pie` -- CREATE TABLE IF NOT EXISTS `chart_pie` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` varchar(30) NOT NULL, `pv` int(10) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUT

java中制作折线图 柱状图 饼状图

问题描述 java中制作折线图 柱状图 饼状图 java中 jfreechart 如何从数据库中读取数据,显示的时候作为一个动态的曲线图展示出来,这个要如何实现?谁有好的建议提一下,或者给个demo看看

asp.net利用OWC生成饼状图、柱状图

OWC(Microsoft Office Web Components)是 Microsoft Office 使用的数据绑定 ActiveX 控件,安装office就有了,其实也可以单独安装的(google下载),使用OWC做了一个饼状图和柱状图,感觉比较简单,开发难度小,效率比较高,OWC的主要原理是按照所传入的数据生成相应的图片,然后开发人员将该图片加载到相应的位置即可实现效果,个人感觉生成的图比较粗糙,但是真的封装的很好,只需按照函数要求输入数据就OK了,可以设置图片的背景色,字体,大小等

MPAndroidChart开源图表库的使用介绍之饼状图、折线图和柱状图_java

MPAndroidChart开源图表库之饼状图 为大家介绍一款图标开源库MPAndroidChart,它不仅可以在Android设备上绘制各种统计图表,而且可以对图表进行拖动和缩放操作,用起来非常灵活.MPAndroidChart同样拥有常用的图表类型:线型图.饼图.柱状图和散点图. mpandroidchartlibrary.jar包下载地址: https://github.com/PhilJay/MPAndroidChart/releases 下面主要实现以下饼状图: 1.从上面的地址中下载

Flash饼状图,柱状图,k线图等动态图表解决资源大全

k线图|饼状图|动态|解决|图表|柱状图 FLASH 3D饼状图,2D饼状图,3D柱状图,2D柱状图,交易K线图,走势图,曲线图.... 各类FLASH+XML图表应用资源,数据直观统计应用的必备工具.... 收集详尽的FLASH商业图表的解决方案.汇总在这里,点击打开下面的网站下载资源. AnyChart Flash Chart Component Aurigma FlashChart B-Line Charting Component Corda's PopChart FusionChart

求一个饼状图或柱状图php生成类或例子

饼状图|柱状图 PHP代码:--------------------------------------------------------------------------------/*-------------------------------------------------------------------------*///// Module Name: 一个3D的饼图类//// Author:Avenger(avenger@php.net) Last Modify: 200