【Java绘图】超详细图解Jfree的安装、配置与使用

Jfree的安装和使用详解(有图和实例)

Jfree安装

freeChart是一个用Java开发的开源库。 它可以在基于Java的应用程序中使用,以创建各种图表。 通过使用JFreeChart,我们可以创建所有主要类型的2D和3D图表,如饼图,条形图,折线图,XY图表和3D图表。
下载地址:
Jfree官网下载

方法1:从终端安装(若已配置好java直接看第三步)

1.验证Java安装:打开终端并执行表格中的java命令

系统 任务 命令
Windows 打开命令控制台 C:> java -version
Linux 打开命令终端 $ java -version

返回java版本则证明已经安装过java,没有则需先配置好Java再进行Jfree的配置

2.配置java环境:将JAVA_HOME环境变量设置为指向计算机上安装Java的基本目录位置(以jdk1.7.0为例)

系统 命令1 命令2
Windows 将环境变量JAVA_HOME设置为C:\ProgramFiles\java\jdk1.7.0_60 附加字符串; C:\Program Files\Java\jdk1.7.0_60\bin到系统变量PATH的末尾。
Linux export JAVA_HOME =/usr/local/java-current export PATH = path : JAVA_HOME/bin/

备注:如果在安装java是没有按默认选择而是改变了路径,这里的命令和表格中提供的将会有差异。

3.安装Jfreechart:从链接http://www.jfree.org/jfreechart/download/下载最新版本的JFreeChart.zip,并把zip文件解压。本例中我将其解压到C盘中,所以执行命令如表格:

系统 命令
Windows 将字符串“C:\jfreechart-1.0.18\lib\jfreechart-1.0.18.jar”和“C:\jfreechart-1.0.18\lib\jcommon-1.0.22.jar”附加到用户的末尾变量CLASSPATH
Linux 导出CLASSPATH = $ CLASSPATH:/usr/share/jfreechart1.0.18/lib/jfreechart-1.0.18.jar:/usr/share/jfreechart-1.0.18/lib/jcommon1.0.22.jar

如解压到别的地方,可将命令中的路径改为该文件的路径。

方法2:从IDEA配置

1.下载JfreeChart:从链接http://www.jfree.org/jfreechart/download/下载最新版本的JFreeChart.zip,并把zip文件解压。
【Java绘图】超详细图解Jfree的安装、配置与使用_第1张图片

2.导入idea:把JFreeChart.jar 和 jcommon.jar 两个包导入IDEA。
【Java绘图】超详细图解Jfree的安装、配置与使用_第2张图片

【Java绘图】超详细图解Jfree的安装、配置与使用_第3张图片
【Java绘图】超详细图解Jfree的安装、配置与使用_第4张图片

Jfree使用

在https://iowiki.com/jfreechart/jfreechart_quick_guide.html中对JfreeChart的基本类有着非常详尽的介绍,不在赘述。这里简单放几个示例代码,笔者会尽量详尽地进行注释,阅读一遍可以了解大概的用法。

帮助理解

想用Jfree作图,核心需要得到的就是一个参数:数据集
图的名字、图的类型、图的大小等等,都是一两行代码、一两个方法就能解决的。所以每次用Jfree处理图像,核心代码功能就在于处理数据集,并将处理好的数据集映射到Jfree的点集中。
以折线图为例:
经过种种方法你处理好了一个 double[] timeset , 则已快得到胜利。接下来只需要:
a.创建 XYseries(点集),一个XYseries对象代表了一条新线,想要图里有一条折线就创建一个,多条就多个。将timeset映射到XYseries中,一般用 点集对象.add(数据集中的x轴数据,数据集中的y轴数据)来添加。
b.创建XYSeriesCollection(图的数据集) ,一般用 图集对象.addSeries(点集对象)来添加
c.生成图像,创建Jfreechart对象等于ChartFactory.createXYLineChart {“图的标题名”,“X轴名称”,“Y轴名称”,刚刚处理好的图的数据集}
d.创建画布,新建ChartPanel对象,然后调用.setPreferredSize(X轴大小,Y轴大小)。
大概就是全部流程。接下来看几段示例代码以理解具体实现。

折线图

import org.jfree.chart.ChartPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;

public class LineChart extends ApplicationFrame {
    public LineChart( String applicationTitle , String chartTitle ) {
        super(applicationTitle);

        //帮助理解中提到的创建JfreeChart
        JFreeChart lineChart = ChartFactory.createLineChart(
                chartTitle,//标题名
                "Years",//X轴
                "Number of Schools",//Y轴
                createDataset(),//图的数据集
                PlotOrientation.VERTICAL,
                true,true,false);

        //创建并设置画布大小
        ChartPanel chartPanel = new ChartPanel( lineChart );
        chartPanel.setPreferredSize( new java.awt.Dimension( 560 , 367 ) );
        setContentPane( chartPanel );
    }

    private DefaultCategoryDataset createDataset( ) {
        //产生数据集
        DefaultCategoryDataset dataset = new DefaultCategoryDataset( );
        dataset.addValue( 15 , "schools" , "1970" );
        dataset.addValue( 30 , "schools" , "1980" );
        dataset.addValue( 60 , "schools" ,  "1990" );
        dataset.addValue( 120 , "schools" , "2000" );
        dataset.addValue( 240 , "schools" , "2010" );
        dataset.addValue( 300 , "schools" , "2014" );
        return dataset;
    }

    //在主函数中执行
    public static void main( String[ ] args ) {
        LineChart chart = new LineChart(
                "School Vs Years" ,
                "Numer of Schools vs years");
        chart.pack( );
        RefineryUtilities.centerFrameOnScreen( chart );
        chart.setVisible( true );
    }
}

跑出来的结果:
【Java绘图】超详细图解Jfree的安装、配置与使用_第5张图片

饼状图

import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
        //相比折线图改动
import org.jfree.data.general.DefaultPieDataset; 
import org.jfree.data.general.PieDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class PieChart extends ApplicationFrame {
    public PieChart( String title ) {
        super( title );
        setContentPane(createDemoPanel( ));
    }
    private static PieDataset createDataset( ) {
        DefaultPieDataset dataset = new DefaultPieDataset( );
        //("数值对应名称",百分比)
        dataset.setValue( "1970",10.00);
        dataset.setValue( "1980",20.00);
        dataset.setValue( "1990",30.00 );
        dataset.setValue( "2000",20.00 );
        dataset.setValue( "2010",10.00);
        dataset.setValue( "2014",10.00);
        return dataset;
    }
    private static JFreeChart createChart( PieDataset dataset ) {
        JFreeChart chart = ChartFactory.createPieChart(
                "Years vs Sschools",   // 标题
                dataset,          // 数据
                true,            
                true,
                false);
        return chart;
    }
    public static JPanel createDemoPanel( ) {
        JFreeChart chart = createChart(createDataset( ) );
        return new ChartPanel( chart );
    }
    public static void main( String[ ] args ) {
        PieChart demo = new PieChart( "Years vs Sschools" );
        demo.setSize( 560 , 367 );
        RefineryUtilities.centerFrameOnScreen( demo );
        demo.setVisible( true );
    }
}

跑出来的结果:
【Java绘图】超详细图解Jfree的安装、配置与使用_第6张图片

柱状图

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.category.DefaultCategoryDataset;

public class Chart {
    public static void main(String[] args) {
        
        DefaultCategoryDataset dataset = new DefaultCategoryDataset();
        dataset.addValue(15, "school1", "1970");
        dataset.addValue(30, "school1", "1980");
        dataset.addValue(60, "school1", "1990");
        dataset.addValue(120, "school2", "1970");
        dataset.addValue(240, "school2", "1980");
        dataset.addValue(300, "school2", "1990");

        JFreeChart chart = ChartFactory.createBarChart3D(
                "Years vs School",
                "year",
                "number",
                dataset,
                PlotOrientation.VERTICAL,
                true, true, false);


        ChartFrame chartFrame = new ChartFrame("Test", chart);
        chartFrame.pack();
        chartFrame.setVisible(true);
    }

}

跑出来的结果如下:
【Java绘图】超详细图解Jfree的安装、配置与使用_第7张图片

实例:利用 ω \omega ω的定义证明 n**2= ω \omega ω(n)

import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;

import javax.swing.*;
`
public class OmegaExample extends JFrame {

    public OmegaExample(String title) {
        super(title);

        XYSeries nSeries = new XYSeries("n");          //第一个点集(即图里第一条线)的名字
        XYSeries nSquaredSeries = new XYSeries("n^2"); //第二个点集(即图里第二条线)的名字

        int maxValue = 10;

        //为点集填充数值
        for (int n = 1; n <= maxValue; n++) {
            nSeries.add(n, n);
            nSquaredSeries.add(n, Math.pow(n, 2));
        }

        //将两个点集添加到collection里
        XYSeriesCollection dataset = new XYSeriesCollection();
        dataset.addSeries(nSeries);
        dataset.addSeries(nSquaredSeries);

        JFreeChart chart = ChartFactory.createXYLineChart(
                "Growth Rates: n vs n^2", //图的标题
                "n",                      //X轴的名字
                "Value",                  //y轴的名字
                dataset                   //绘图所用数据集
        );

        ChartPanel chartPanel = new ChartPanel(chart);
        chartPanel.setPreferredSize(new java.awt.Dimension(560, 370));                      //创建560×370的画布
        setContentPane(chartPanel);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            OmegaExample example = new OmegaExample("OmegaExample");
            example.setSize(800, 600);
            example.setLocationRelativeTo(null);
            example.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
            example.setVisible(true);        //让图片可见
        });
    }
}

跑出来的结果:
【Java绘图】超详细图解Jfree的安装、配置与使用_第8张图片

常见新手问题

Q1:我导入了Jfreechart但是IDEA提示无法识别方法?
A1:点进Project Structure-Lib,检查是否已添加Jfreechart和Jcommon,两个都得有。常见情况是没有加上Jcommon。

Q2:IDEA提示无法识别setVisible()等方法?
A2:大概率是你复制代码到IDEA中,但是更改过源代码的类名。若是此种情况,在主函数中找到使用了原类名的地方修改成新类名即可。

你可能感兴趣的:(java,java,开发语言,jar,intellij-idea,idea,图像处理)