数据可视化-JFreeChart学习

下载

饼图(Pie Chart)

条形图( Bar Chart) 

折线图( Line Chart)

XY图表( XY Chart)

下载

下载SDK:

SDK

配置环境变量

下载JFreechart:

JFreechart

将压缩包解压,解压后导包:

将jfreechart-1.0.1.jar和jcommon-1.0.0.jar文件的完整路径添加 

饼图(Pie Chart)

在饼图中,每个扇区的弧长与其代表的数量成比例。

package Data_Vis;

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;

import javax.swing.*;

public class Pie_chart extends ApplicationFrame {
    public Pie_chart(String title) {
        super(title);
       setContentPane(panel());
    }
    /**创建数据集
     * */
    public static PieDataset dataset(){
        DefaultPieDataset dataset=new DefaultPieDataset();
        dataset.setValue("果汁",15.58);
        dataset.setValue("即饮茶",7.91);
        dataset.setValue("包装饮用水",26.92);
        dataset.setValue("碳酸饮料",35.28);
        dataset.setValue("其他",14.32);
        return dataset;
    }
    /**创建表
     * */
    public static JFreeChart chart(PieDataset dataset) {
        JFreeChart chart = ChartFactory.createPieChart(
                "全球软饮料产品结构",   //标题
                dataset,           //数据
                true,      //包含图例
                true,
                false
        );
      return chart;
    }
    /**图容器
     * */
    public static JPanel panel(){
        JFreeChart chart=chart(dataset());
        return new ChartPanel(chart);
    }

    public static void main(String[] args) {
        Pie_chart demo=new Pie_chart("产品结构");
        demo.setSize(560,370);
        RefineryUtilities.centerFrameOnScreen(demo);
        demo.setVisible(true);//设置可视化

    }


}

效果:

条形图( Bar Chart) 

  条形图使用不同的方向(水平或垂直)条形来显示各种类别的比较。 图表的一个轴(域轴)显示正在比较的特定域,另一个轴(范围轴)表示离散值。

笔记本属性评分
名称\属性价格CPU内存
Acer456
Dell8910
HP686

package Data_Vis;

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

public class Bar_chart extends ApplicationFrame {

    public Bar_chart(String appTitle,String chartTitle) {
        super(appTitle);
        JFreeChart barChart= ChartFactory.createBarChart(
                chartTitle,
                "Category",
                "Score",
                createDataset(),
                PlotOrientation.VERTICAL,
                true,true,false
        );
        ChartPanel chartPanel=new ChartPanel(barChart);
        chartPanel.setPreferredSize(new java.awt.Dimension(560,370));
        setContentPane(chartPanel);

    }
    //创建数据集
    private CategoryDataset createDataset(){
        final String Acer="Acer";
        final String HP="HP";
        final String Dell="Dell";
        final String price="price";
        final String cpu="cpu";
        final String memory="memory";
        final DefaultCategoryDataset dataset=new DefaultCategoryDataset();
        dataset.addValue(4,Acer,price);
        dataset.addValue(5,Acer,cpu);
        dataset.addValue(6,Acer,memory);
        dataset.addValue(8,Dell,price);
        dataset.addValue(9,Dell,cpu);
        dataset.addValue(10,Dell,memory);
        dataset.addValue(6,HP,price);
        dataset.addValue(8,HP,cpu);
        dataset.addValue(6,HP,memory);
        return  dataset;

    }

    public static void main(String[] args) {
        Bar_chart chart=new Bar_chart("Computer Quality-Price Ratio","which brand you prefer?");
        chart.pack();
        RefineryUtilities.centerFrameOnScreen(chart);
        chart.setVisible(true);
    }


}

效果:

 JPEG图像创建:

  

package Data_Vis;

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

import java.io.File;

public class Barchart {
    public static void main(String[] args) throws Exception {
        final String Acer="Acer";
        final String HP="HP";
        final String Dell="Dell";
        final String price="price";
        final String cpu="cpu";
        final String memory="memory";
        final DefaultCategoryDataset dataset=new DefaultCategoryDataset();
        dataset.addValue(4,Acer,price);
        dataset.addValue(5,Acer,cpu);
        dataset.addValue(6,Acer,memory);
        dataset.addValue(8,Dell,price);
        dataset.addValue(9,Dell,cpu);
        dataset.addValue(10,Dell,memory);
        dataset.addValue(6,HP,price);
        dataset.addValue(8,HP,cpu);
        dataset.addValue(6,HP,memory);
        JFreeChart barChart= ChartFactory.createBarChart(
                "which brand you prefer?",
                "Category",
                "Score",
                dataset,
                PlotOrientation.VERTICAL,
                true,true,false
        );
        File chart=new File("BarChart.jpeg");
        ChartUtilities.saveChartAsJPEG(chart,barChart,640,480);



    }
}

其他图表也可以生成除此之外的其他图片格式。

折线图( Line Chart)

  折线图或折线图将信息显示为由直线段连接的一系列数据点(标记)。 折线图显示数据在相同时间频率下的变化情况。

不同年份平均每棵苹果树的结果数量
年份苹果数量
150
370
5150
7130
9170
package Data_Vis;

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

public class Line_chart extends ApplicationFrame {
    public static final String tree="AppleTree";

    public Line_chart(String AppTitle,String chartTitle) {
        super(AppTitle);
        JFreeChart lineChart= ChartFactory.createLineChart(
                chartTitle,
                "Year",
                "Number",
                createDataset(),
                PlotOrientation.VERTICAL,
                true,true,false
        );
        ChartPanel chartPanel=new ChartPanel(lineChart);
        chartPanel.setPreferredSize(new java.awt.Dimension(560,360));
        setContentPane(chartPanel);
    }

    private DefaultCategoryDataset createDataset( ) {
        DefaultCategoryDataset dataset = new DefaultCategoryDataset( );
        dataset.addValue( 50 , tree , "1" );
        dataset.addValue( 70 , tree , "3" );
        dataset.addValue( 150 , tree ,  "5" );
        dataset.addValue( 130 , tree , "7" );
        dataset.addValue( 170 , tree , "9" );
        return dataset;
    }
    public static void main(String[] args) {
       Line_chart chart=new Line_chart("Apples - Year","Apple Number");
       chart.pack();
        RefineryUtilities.centerFrameOnScreen(chart);
        chart.setVisible(true);
    }
}

 XY图表( XY Chart)

  XY图表(散点图)基于一个由X和Y值列表组成的数据系列。 每个值对(X,Y)是坐标系中的一个点。 这里,一个值确定水平(X)位置,另一个确定垂直(Y)位置。

不同品牌电脑性价比(性能x,价格y)
HPDellAcer
5,54,56,6
7,62,44,6
7,88,710,9
 

package Data_Vis;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.plot.XYPlot;
import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;
import org.jfree.data.xy.XYDataset;
import org.jfree.data.xy.XYSeries;
import org.jfree.data.xy.XYSeriesCollection;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

import java.awt.*;
public class XYLine_Chart extends ApplicationFrame {
    public XYLine_Chart(String applicationTitle, String chartTitle ) {
        super(applicationTitle);
        JFreeChart xylineChart = ChartFactory.createXYLineChart(
                chartTitle ,
                "Category" ,
                "Score" ,
                createDataset() ,
                PlotOrientation.VERTICAL ,
                true , true , false);
        ChartPanel chartPanel = new ChartPanel( xylineChart );
        chartPanel.setPreferredSize( new java.awt.Dimension( 560 , 367 ) );
        final XYPlot plot = xylineChart.getXYPlot( );
        XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer( );
        renderer.setSeriesPaint( 0 , Color.RED );
        renderer.setSeriesPaint( 1 , Color.GREEN );
        renderer.setSeriesPaint( 2 , Color.black );
        renderer.setSeriesStroke( 0 , new BasicStroke( 4.0f ) );
        renderer.setSeriesStroke( 1 , new BasicStroke( 3.0f ) );//线条粗细
        renderer.setSeriesStroke( 2 , new BasicStroke( 2.0f ) );
        plot.setRenderer( renderer );
        setContentPane( chartPanel );
    }
    //创建数据集
    private XYDataset createDataset( ) {
        final XYSeries HP = new XYSeries( "HP" );
       HP.add( 5 , 5 );
        HP.add( 7 , 6 );
       HP.add( 7 , 8 );
        final XYSeries Dell = new XYSeries( "Dell" );
        Dell.add( 4 , 5);
        Dell.add( 2 , 4 );
        Dell.add( 8, 7 );
        final XYSeries Acer = new XYSeries( "Acer" );
        Acer.add(  6, 6);
        Acer.add( 4 , 6 );
        Acer.add( 10, 9 );
        final XYSeriesCollection dataset = new XYSeriesCollection( );
        dataset.addSeries(HP );
        dataset.addSeries( Dell );
        dataset.addSeries( Acer );
        return dataset;
    }
    public static void main( String[ ] args ) {
        XYLine_Chart chart = new XYLine_Chart("Chart",
                "Quality-Price Ratio");
        chart.pack( );
        RefineryUtilities.centerFrameOnScreen( chart );
        chart.setVisible( true );
    }
}

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值