开发手册 欢迎您!
软件开发者资料库

JFreeChart - XY图表

JFreeChart XY Chart - 从概述开始,简单易学地学习JFreeChart Concepts,然后介绍JFreeChart安装,参考API,JFreeChart架构,饼图,条形图,折线图,XY图表,3D饼图/条形图,气泡图,时间系列图表,JFreeChart文件和JFree图表数据库等

XY图表(散点图)基于一个由X和Y值列表组成的数据系列.每个值对(X,Y)是坐标系中的一个点.这里,一个值确定水平(X)位置,另一个确定垂直(Y)位置.本章演示了如何使用JFreeChart从给定的业务数据集创建 XY图表.

业务数据

考虑一个我们想要为所有主要浏览器创建XY图表的示例.在这里,从不同类别的人收集不同的表现分数,如下所示 :

Firefox 类别(X)分数(Y)
1.01.0
2.04.0
3.03.0
Chrome 类别(X)分数(Y)
1.04.0
2.05.0
3.06.0
IE 类别(X)得分(Y)
3.04.0
4.05.0
5.04.0

基于AWT的应用程序

以下是从上面给出的信息创建XY图表的代码.此代码可帮助您在任何基于AWT的应用程序中嵌入XY图表.

import java.awt.Color; import java.awt.BasicStroke; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.ui.ApplicationFrame; import org.jfree.ui.RefineryUtilities; import org.jfree.chart.plot.XYPlot; import org.jfree.chart.ChartFactory; import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.xy.XYSeriesCollection; import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;public class XYLineChart_AWT extends ApplicationFrame {   public XYLineChart_AWT( 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.YELLOW );      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 firefox = new XYSeries( "Firefox" );                firefox.add( 1.0 , 1.0 );                firefox.add( 2.0 , 4.0 );                firefox.add( 3.0 , 3.0 );                      final XYSeries chrome = new XYSeries( "Chrome" );                chrome.add( 1.0 , 4.0 );                chrome.add( 2.0 , 5.0 );                chrome.add( 3.0 , 6.0 );                      final XYSeries iexplorer = new XYSeries( "InternetExplorer" );                iexplorer.add( 3.0 , 4.0 );                iexplorer.add( 4.0 , 5.0 );                iexplorer.add( 5.0 , 4.0 );                      final XYSeriesCollection dataset = new XYSeriesCollection( );                dataset.addSeries( firefox );                dataset.addSeries( chrome );                dataset.addSeries( iexplorer );      return dataset;   }   public static void main( String[ ] args ) {      XYLineChart_AWT chart = new XYLineChart_AWT("Browser Usage Statistics",         "Which Browser are you using?");      chart.pack( );                RefineryUtilities.centerFrameOnScreen( chart );                chart.setVisible( true );    }}

让我们将上述Java代码保存在 XYLineChart_AWT.java 文件中,然后从提示命令编译并运行它:

 $ javac XYLineChart_AWT.java  $ java XYLineChart_AWT

如果一切正常,它将编译并运行以生成以下XY Graph :

JFreeChart XY Chart

JPEG图像创建

让我们重新编写上面的例子,从命令生成JPEG图像line.

import java.io.*;import org.jfree.chart.ChartFactory;import org.jfree.chart.JFreeChart;import org.jfree.data.xy.XYSeries;import org.jfree.chart.plot.PlotOrientation;import org.jfree.data.xy.XYSeriesCollection;import org.jfree.chart.ChartUtilities; public class XYLineChart_image {   public static void main( String[ ] args )throws Exception {      final XYSeries firefox = new XYSeries( "Firefox" );      firefox.add( 1.0 , 1.0 );      firefox.add( 2.0 , 4.0 );      firefox.add( 3.0 , 3.0 );            final XYSeries chrome = new XYSeries( "Chrome" );      chrome.add( 1.0 , 4.0 );      chrome.add( 2.0 , 5.0 );      chrome.add( 3.0 , 6.0 );            final XYSeries iexplorer = new XYSeries( "InternetExplorer" );      iexplorer.add( 3.0 , 4.0 );      iexplorer.add( 4.0 , 5.0 );      iexplorer.add( 5.0 , 4.0 );            final XYSeriesCollection dataset = new XYSeriesCollection( );      dataset.addSeries( firefox );      dataset.addSeries( chrome );      dataset.addSeries( iexplorer );      JFreeChart xylineChart = ChartFactory.createXYLineChart(         "Browser usage statastics",          "Category",         "Score",          dataset,         PlotOrientation.VERTICAL,          true, true, false);            int width = 640;   /* Width of the image */      int height = 480;  /* Height of the image */       File XYChart = new File( "XYLineChart.jpeg" );       ChartUtilities.saveChartAsJPEG( XYChart, xylineChart, width, height);   }}

让我们将上述Java代码保存在 XYLineChart_image.java 文件中,然后从命令提示编译并运行它为 :

 $ javac XYLineChart_image.java  $ java XYLineChart_image

如果一切正常,它将编译并运行以在当前目录中创建名为 XYLineChart.jpeg 的JPEG图像文件.