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!

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

  1. WPF、Silverlight项目中使用柱状图、饼状图、折线图

    在开发的过程中,可能会遇到柱状图.饼状图.折线图来更好的显示数据,最近整理了一下,遂放出来望需要的朋友可以参考.本文仅仅是简单显示,如需复杂显示效果请参考官网代码示例.----本文代码使用WPF,Si ...

  2. 使用FusionCharts出柱状图和饼状图

    在最近的项目中,需要使用出图,能够查看柱状图,饼状图等效果,刚开始我们用JS写的效果,发现效果不理想,找了一个JS插件发现效果还是不理想,客户也不满意,客户希望要很炫的效果,最后我们使用了Fusion ...

  3. FusionChart实现柱状图、饼状图的动态数据显示 附Demo

    最近做的项目中需要用饼状图显示——'问卷调查'的统计结果(之前用过FusionChart做过柱状图的数据展示,那还是两年前的事了),在网上查了下FusionChart实现饼状图显示方面的资料,却发现资 ...

  4. 前端数据统计用做Bootstrap的一些柱状图、饼状图和折线图案例

    Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷. Bootstrap ...

  5. FusionChart实现柱状图、饼状图的动态数据显示

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  6. echarts 柱状图和饼状图动态获取后台数据

    运用echarts来实现图表 1.首先下载echarts包  http://echarts.baidu.com/echarts2/doc/example.html,在这里我下载的是 2.将echart ...

  7. 使用 jfreechart 生成 曲线、柱状图、饼状图、分布图 展示到JSP

    虽然现在JS做报表和图形展示已经非常普遍和漂亮了,但是不能忽略有jfreechart 这样一种东西! 这些翻阅资料,在看以前写的示例时发现了关于jfreechart 的简单示例,不管怎样发上来分享一下 ...

  8. DevExpress使用之ChartControl控件绘制图表(多坐标折线图、柱状图、饼状图)

    最近因为公司项目需要用到WinForm的DecExpress控件,在这里把一些使用方法总结一下. DevExpress中有一个专门用来绘制图表的插件ChartControl,可以绘制折线图.饼状图.柱 ...

  9. iOS:使用贝塞尔曲线绘制图表(折线图、柱状图、饼状图)

    1.介绍: UIBezierPath :画贝塞尔曲线的path类 UIBezierPath定义 : 贝赛尔曲线的每一个顶点都有两个控制点,用于控制在该顶点两侧的曲线的弧度. 曲线的定义有四个点:起始点 ...

随机推荐

  1. bootstrap插件fileinput.js 显示无法上传失败

    哪怕图片已经传到服务器上了 依然显示出错 // 处理完成后,必须返回一个json数据,否则会报错误 JSONObject jsonObject = new JSONObject(); jsonObje ...

  2. JS运行机制之 Event Loop 的思考

    先举个栗子,如下: for (var i = 0; i < 5; i++) { setTimeout(function() { console.log('i: ',i); //一秒之后输出几乎没 ...

  3. Java常用排序算法

    在排序过程中,全部记录存放在内存,则称为内排序,如果排序过程中需要使用外存,则称为外排序. 一般来说外排序分为两个步骤:预处理和合并排序.首先,根据可用内存的大小,将外存上含有n个纪录的文件分成若干长 ...

  4. hadoop hdfs 高可用

    单点故障: 如果某一个节点或服务出了问题,导致服务不可用 单点故障解决方式: 1.给容易出故障的地方安排备份 2.一主一备,要求同一时刻只能有一个对外提供服务 3.当active挂掉之后,standb ...

  5. 百度音乐flac 下载

    破解百度音乐白金会员 为了给Play Music上传标签齐全的正版的mp3,本屌翻遍网络苦思冥想.现在终于被我找到了破解之法——破解百度白金会员!破解之后可以直接从百度下载正版授权的320k文件,更可 ...

  6. python笔记四(dict/set/不可变对象)

    一.dict 字典是包含key_value存储方式.在放进去的时候,必须根据key值Hash出value的存放位置,这样,取的时候才能根据key直接拿到value. dict的操作: d = {'Mi ...

  7. 5秒让你的View变3D,ThreeDLayout使用和实现

    在很久很久以前,写了一篇自定义3d view的博客.但是只是讲了如何实现,实现起来还是比较耗时,所以本着平易近人的心态,把他封装成了一个ViewGroup,只需要在你的view或者布局外面包裹一层Th ...

  8. move_uploaded_file的failed to open stream错误处理

    PHP的基本语法学习的差不多了,现在开始学习PHP的文件上传功能实现了.功能中使用到了move_uploaded_file方法,运行时报错: failed to open stream. 经过查资料, ...

  9. CocoaChina(总结)升级到xcode8遇到的问题及解决方案

    此总结由CocoaChina论坛版主wo709128079及广大坛友共同汇总.>>查看原帖 升级Xcode8已是必然,升级iOS 10的用户不能说大有人在,应该也不会少,楼主听说,如果不升 ...

  10. [shiro学习笔记]第四节 使用源代码生成Shiro的CHM格式的API文档

    版本为1.2.3的shiro API chm个事故文档生成. 获取shiro源代码 编译生成API文档 转换成chm格式 API 获取shiro源代码 shiro官网: http://shiro.ap ...