`
abin103
  • 浏览: 152928 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Jfreechart的研究学习

阅读更多
jfreechat 官方api
http://www.jfree.org/jfreechart/api/javadoc/index.html
以下是介绍
1 简介

JFreeChart 是 SourceForge.net 上的一个开源项目,它的源码和 API 都可以免费获得。 JFreeChart 的功能非常强大,可以实现饼图 ( 二维和三维 ) ,  柱状图  ( 水平 , 垂直 ), 线图 , 点图 , 时序图 , 甘特图 ,  股票行情图 , 混和图 ,  温度计图 ,  刻度图等常用商用图表,   图形可以导出成 PNG 和 JPEG 格式,同时还可以与 PDF 和 EXCEL 关联,支持对图形的放大、缩小,支持常见图形的 3D 显示。

2 图形 对象的处理

2 .1 JFreeChart对象

JFreeChart 可以生成很多图形对象,它的工厂类提供了 33 个工厂方法用于生成不同的图形对象(具体的工厂方法可以参见 JFreeChart 的 API 手册或者源码中的 ChartFactory 类 )。JFreechart 对图形对象的抽象具体化。图形对象( JFreeChart ),由 Title( 主标题 ) , SubTitle (子标题 ) , Plot (图形的绘制结构)等几个主要对象组成。:

这是一个 JFreeChart 对象,上面的“ chart 标题”是 Title 对象,中间区域是 Plot 对象(包括绘图区域和坐标轴区域),下面的区域是 LegendTitle 对象,是一种 SubTitle 对象。

每个 JFreeChart 对象只能有 1 个 Title 对象, 1 个 Plot 对象,可以有多个 SubTitle 对象。 JFreeChart 对象可以进行的操作有:背景的设置(背景颜色、背景图片、透明度等)、边框的设置(是否可见、笔画、 Paint 等)、渲染方式的设置、标题对象的设置、子标题对象的增删查操作。(本文中的所有操作都不提供代码级的介绍,可参见 API 手册或者源码)

2 .2 主标题对象

主标题对象是 TextTitle 类型,可以进行的操作有:背景设置、字体设置(字体类型、颜色、内容、对齐方式等操作)、 tooltip 设置、 URL 设置。

2 .3 Plot 对象

Plot 对象是图形的绘制结构对象。 JFreeChart 中含有很多不同的 Plot 对象,每一种图形对象中的 Plot 对象都在实例化的时候创建。所有的 Plot 共有的操作有:背景设置(背景颜色、背景图片、透明度等)、前景透明度设置、无数据存在情况的设置(显示的字符内容、显示的字体、显示的 Paint )、放大缩小比例的设置,大部分 Plot 对象还有设置 Datset 、设置 Renderer 对象操作。

JFreeChart 中有 18 种 Plot 抽象类的具体实现类。 Plot 的具体实现类主要由以下重要对象组成: Renderer 对象(图形的绘制单元——绘图域) Datset (图形的数据源), DomainAxis (区域轴,相当于 x 轴), RangeAxis (范围轴,相当于 y 轴)。不同的 Plot 对象组成方式不尽相同,有的不含有 Renderer 对象,比如 CompassPlot 、 ContourPlot 、 MultiplePiePlot 、 PiePlot 等,有的不含有 DomainAxis 、 RangeAxis 对象,另外除了 FastScatterPlot 类都含有 Datset 对象, FastScatterPlot 使用 float 的二维数组充当数据源。尤其说明一点,饼状图相关的 Plot 对象( MultiplePiePlot 、 PiePlot 、 PiePlot3D 、 RingPlot )中都不含有 Renderer 对象、 DomainAxis 对象、 RangeAxis 对象。

一般来说, Datset 对象存储数据模型, Renderer 对象存储显示模型, Plot 对象根据 Datset 对象、 Renderer 对象完成画图操作。

仍以上面的图形讲解 Plot 对象的组成。

   上图的中间区域是是一个 XYPlot 对象。其中的折线部分即是图形的绘制单元 Renderer 对象。 X 轴是 DomainAxis , y 轴是 RangeAxis ,其中 Datset 对象属于数据模型范畴,是 UI 不可见对象。该图中的 plot 背景色、网格线的各种设置可以通过 XYPlot 对象本身完成。

       下面讲解 Renderer 对象、 Axis 对象( X 轴、 y 轴都属于 Axis 对象), Datset 对象在后续章节中专门讲解。

2 .3.1 Renderer对象

Renderer 对象是图形的绘制单元。 JFreeChart 提供了两个接口 CategoryItemRenderer 和 XYItemRenderer 、 1 个抽象类 AbstractRenderer 供具体的 Renderer 类实现,给出了将近 50 种具体实现类。

一般来说 Renderer 对象可进行的操作有:对 item label (下图中的柱状图上的红色数字即为 item label 的示例)的默认设置( item label 的产生方式、是否可见、字体、 Paint 、正反向 item label 的位置设置等)、绘制图形的边框默认设置( Paint 、笔画、是否可见等)、绘制图形的默认设置(形状、笔画、是否可见、对应的图例中是否可见等,折线图还有线条是否可见、折点图形是否可见、折点图形是否填充、折点图形的形状、对应的图例中线条是否可见、图形是否可见、整体是否可见等)、以及对指定 item label 的设置、指定绘制图形的设置。可以说和具体绘制的图形相关的属性都可以通过 Renderer 对象设置。

不同的 Renderer 的实现类实现了不同的显示方式,在含有 Renderer 对象的 JFreeChart 对象中, R enderer 对象决定了JFreeChart对象的显示方式。例如:柱状图的Plot对象中默认的Renderer对象是 CategoryItemRenderer 对象,通过设置 Plot 对象的Renderer对象 为 LineAndShapeRenderer ,则柱状图变为线图。使用中一般不需要显式的实例化一个 R enderer 对象,一般通过 JFreeChart 对象的 Plot 对象调用现有的 R enderer 对象进行重新设置等操作。

2 .3.2 Axis对象

JFreeChart 提供了两种类型的坐标轴: CategoryAxis (等级轴)和 ValueAxis (值轴), ValueAxis 又有 3 个子类: DateAxis (时间轴)、 NumberAxis (数字轴)、 PeriodAxis (时期轴)。这些坐标轴还有更详细的子类,不再一一列举

Axis 对象可进行的操作有:标题的设置(内容、字体、Paint、显示角度等)、坐标线的设置(笔画、Paint、是否可见等)、刻度线的设置(是否可见、笔画、Paint、位于绘图区域的长度、位于绘图区域外的长度等)、刻度标示的设置(笔画、Paint、字体、与轴的距离等)、坐标轴范围设置等。

CategoryAxis 对象还可以进行的操作有: 刻度标示间距 设置( 最小间距、最大间距、指定间距)等。

ValueAxis 对象可进行的操作有:轴端设置(显示的图形形状)、范围设置(是否自动产生范围、自动产生的最小范围、最大范围、指定确定范围、指定范围大小等)、间隔设置(是否自动产生间隔、指定间隔)等。

DateAxis 对象还有对时间刻度显示格式的设置操作。

2 . 4 子标题对象

    子标题对象是 Title 类型的对象,一个JFreeChart可以有多个子标题对象。JFreeChart提供了5种Title的实现,可以是图片、文本、图例等的形式。

3 数据源处理

JFreeChart 中的数据源是DataSet接口类型。该接口有三个主要的子类接口:CategoryDataset、PieDataset、SeriesDataset

CategoryDataset 接口的实现类基本上都维护了一个三元组<value,row,col>的列表结构。不同的实现类中value 的类型不相同。<row,col>唯一确定一个三元组。CategoryDataset的实现类提供对这个三元组的增删改查操作。

PieDataset 接口有两个主要的实现类:CategoryToPieDataset 、DefaultPieDataset。PieDataset接口的实现类基本上都维护了一个二元组<key,value>的列表结构。Key唯一确定一个二元组。CategoryDataset的实现类提供对这个二元组的增删改查操作。CategoryToPieDataset中的二元结构列表通过对CategoryDataset类型的对象指定行或者列转化过来。DefaultPieDataset直接维护一个二元结构列表。

SeriesDataset 接口的实现类基本上都维护了一种特定数据结构的列表。以TimeSeriesCollection为例。它维护一个TimeSeries对象列表,提供对该列表的增删查操作。每个TimeSeries对象维护一个<time,value>列表,提供对该列表的增删改查操作。

三 JFreeChart 中对常见图形的处理

       JFreeChart 并不存在多个不同的类来生成不同的图形。所有的图形都是具体类 JFreeChart 的实例化对象,初始化 JFreeChart 对象的时候通过指定不同的 Plot 实现类就可以显示出不同的图形。不同的 Plot 实现类具有不同的 Renderer 对象、 Axis 对象、 Dataset 对象。

       JFreeChart 提供工厂类 ChartFactory 方便使用者生成各种不同的图形。 ChartFactory 类的各个工厂方法中实现对具体 Plot 的指定以及对类 JFreeChart 构造函数的调用。

       下面以常用图形说一下常用的使用流程(大部分的操作讲的并不全面,比如 JFreeChart 可能提供了很多增加、修改数据的方式,下文中可能只列举一种)。

1 柱状图

( 1 )平面柱状图

       生成柱状图操作:

       JFreeChart chart = ChartFactory.createBarChart(

                      String title,                 // 图标题

                String categoryAxisLabel,     //x 轴标题

                String valueAxisLabel,       //y 轴标题

                CategoryDataset dataset,      // 数据源

                PlotOrientation orientation,    // 显示方向

                 boolean legend,             // 是否显示图例

                 boolean tooltips,            // 是否显示 tooltip

                 boolean urls) ;              // 是否指定 url

平面柱状图的 Plot 对象是 CategoryPlot 类型。 CategoryPlot 对象的 x 轴是 CategoryAxis 对象, y 轴是 NumberAxis 对象,绘制单元是 BarRenderer 对象,数据源是 CategoryDataset 对象。



获取 CategoryPlot 对象操作为:

CategoryPlot plot = ( CategoryPlot ) chart.getPlot(); 或者

CategoryPlot plot = chart.getCategoryPlot();

获取绘制单元操作:

       BarRenderer renderer = (BarRenderer) plot.getRenderer();

获取 x 轴的操作:

CategoryAxis xAxis = ( CategoryAxis ) plot.getDomainAxis();

获取 y 轴操作:

NumberAxis yAxis = (NumberAxis) plot.getRangeAxis();

获取数据源:

CategoryDataset dataset=plot.getDataset();



       柱状图可以接受一切 CategoryDataset 类型的数据源,下面讲解一下常用的 CategoryDataset 类型 DefaultCategoryDataset 的使用方式

实例化:

DefaultCategoryDataset dataset = new DefaultCategoryDataset();

增加数据

dataset .addValue(double value, Comparable rowKey, Comparable columnKey) ;

删除数据:

       dataset .removeValue(Comparable rowKey, Comparable columnKey);

       或者

       dataset. removeColumn(int columnIndex);

       或者

       dataset. removeColumn(Comparable columnKey);

       对行同样有上述两种删除方式,不在列举。

修改数据:

       dataset. setValue(double value, Comparable rowKey, Comparable columnKey);

查询数据 :

对 plot 对象、绘制单元、 x 轴、 y 轴的显示特性修改不再一一介绍。

( 2 ) 3D 柱状图

       对应的工厂方法为 createBarChart3D ,该方法的参数与平面柱状图相同。 3D 柱状图的 Plot 对象是 CategoryPlot 类型。 CategoryPlot 对象的 x 轴是 CategoryAxis3D 对象, y 轴是 NumberAxis3D 对象,绘制单元是 BarRenderer3D 对象,数据源是 CategoryDataset 对象。

       具体使用以及操作与平面柱状图雷同,不在详述。

2 饼状图

(1) 平面饼状图

生成平面饼状图:

JFreeChart chart = ChartFactory. createPieChart(String title, // 图标题

                          PieDataset dataset,       // 数据源

                          boolean legend,         // 是否显示图例

                          boolean tooltips,         // 是否显示tooltip

                          boolean urls) ;          // 是否指定url

平面饼状图的Plot对象是PiePlot类型。PiePlot对象没有x轴对象、y轴对象、绘制单元对象,数据源是PieDataset对象。



获取PiePlot对象操作为:

PiePlot plot = (PiePlot) chart.getPlot();

获取数据源:

PieDataset dataset= plot .getDataset();



饼状图可以接受一切 PieDataset 类型的数据源,下面讲解一下常用的 PieDataset 类型 DefaultPieDataset 的使用方式

实例化:

    DefaultPieDataset dataset = new DefaultPieDataset();

增加修改操作:

    dataset. setValue(Comparable key, double value);

删除操作:

    dataset. remove(Comparable key);

查询操作:

    dataset. getKey(int item);

或者

dataset. getValue(int item);



(1)3D 饼状图

       对应的工厂方法为 createPieChart3D ,参数与平面饼状图相同。与平面饼状图的差别在于 Plot 对象是PiePlot3D类型 ,不再详述。

3 多重饼状图

( 1 )多重平面饼状图

生成多重平面饼状图:

       JFreeChart chart = ChartFactory. createMultiplePieChart

(String title,               // 图标题

                        CategoryDataset dataset,     // 数据源

                        TableOrder order,       // 指定提取数据的方式(按行或者按列)

                        boolean legend,            // 是否显示图例

                        boolean tooltips,            // 是否显示 tooltip

                        boolean urls)   ;            // 是否指定 url

多重平面饼状图的 Plot 对象是 MultiplePiePlot 类型。 MultiplePiePlot 对象没有 x 轴对象、 y 轴对象、绘制单元对象,数据源是 CategoryDataset 对象。 MultiplePiePlot 对象中可以含有多个子 JFreeChart 对象,子 JFreeChart 对象是上面讲过的饼状图对象。



获取 MultiplePiePlot 对象操作为:

MultiplePiePlot plotMain = (MultiplePiePlot) chart.getPlot();

获取子 JFreeChart 的操作为:

       JFreeChart childChart=plotMain.getPieChart();

获取数据源:

CategoryDataset dataset= plotMain .getDataset();

( 2 )多重 3D 饼状图

       对应的工厂方法为 createMultiplePieChart3D ,该方法的参数与 多重平面饼状图 相同。 多重 3D 饼状图的 Plot 对象是 MultiplePiePlot 类型。 MultiplePiePlot 对象中可以含有多个子 JFreeChart 对象,子 JFreeChart 对象是上面讲过的 3D 饼状图对象。

4 线图

( 1 )平面线图

       生成平面线图:

       JFreeChart chart = ChartFactory. createLineChart(String title,  // 图标题

                         String categoryAxisLabel,         //x 轴标题

                         String valueAxisLabel,            //y 轴标题

                         CategoryDataset dataset,           // 数据源

                         PlotOrientation orientation,         // 显示方向

                         boolean legend,                 // 是否显示图例

                         boolean tooltips,                 // 是否显示 tooltip

                         boolean urls);                  // 是否指定 url

平面线图除了的 Plot 对象中绘制单元对象是 LineAndShapeRenderer 对象,其他一切组成对象与平面柱状图相同。

获取 Renderer 操作:

LineAndShapeRenderer renderer=(LineAndShapeRenderer) plot.getRenderer();

其他参考平面柱状图。

( 2 ) 3D 线图

对应工厂方法为 createLineChart3D ,参数与 createLineChart 相同。 3D 线图的组成对象除了绘制单元对象是 LineAndShapeRenderer3D 对象,其他一切组成对象与 3D 柱状图相同。

5 时序图

生成时序图:

       JFreeChart chart = ChartFactory.createTimeSeriesChart(

              String title,    // 图标题

                 String timeAxisLabel,   //x 轴标题

                 String valueAxisLabel,  //y 轴标题

                 XYDataset dataset,       // 数据源

                 boolean legend,          // 是否显示图例

                 boolean tooltips,        // 是否显示 tooltip

                 boolean urls);           // 是否指定 url

时序图的 Plot 对象是 XYPlot 类型。 XYPlot 对象的 x 轴是 DateAxis 对象, y 轴是 NumberAxis 对象,绘制单元是 XYLineAndShapeRenderer 对象,数据源是 XYDataset 对象。

Plot 对象的获取操作:

       XYPlot plot = (XYPlot) chart.getPlot();

X 轴对象的获取操作:

       DateAxis xAxis = (DateAxis) plot.getDomainAxis();

Y 轴对象的获取操作:

       NumberAxis yAxis =(NumberAxis) plot.getRangeAxis();

Renderer 对象的获取操作:

       XYItemRenderer renderer= plot.getRenderer();



时序图可以接受一切 XYDataset 类型的数据源,下面讲解一下常用的 XYDataset 类型 TimeSeriesCollection 的使用方式。

实例化:

       TimeSeriesCollection dataset=new TimeSeriesCollection();

添加数据操作:

       dataset. addSeries(TimeSeries); // 后面讲解 TimeSeries 对象

删除数据操作:

       dataset. removeSeries(int index);

查询数据操作 :

       dataset. getSeries(int series);



TimeSeries 对象操作

实例化:

       TimeSeries ts=TimeSeries(String name, Class timePeriodClass);

增加数据操作:

       ts. add(RegularTimePeriod period, double value);

删除数据操作:

       ts. delete(RegularTimePeriod period);  

修改数据操作:

       ts. update(RegularTimePeriod period, Number value);

查询数据操作:

       ts. getValue(RegularTimePeriod period);

类 RegularTimePeriod 是 JFreeChart 提供的时间模板类,它有很多具体的时间类,比如: Minute 、 Second 、 Hour 、 Day…… 等

案例

柱状图

package util;
import java.awt.Color;
import java.awt.Font;
import java.io.FileOutputStream;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.BarRenderer;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
public class BarChart3DDemo
{
public static void main(String[] args) throws IOException

 
JFreeChart chart = ChartFactory.createBarChart3D(
"图书销量统计图", // 图表标题
"图书", // 目录轴的显示标签
"销量", // 数值轴的显示标签
getDataSet(), // 数据集
//PlotOrientation.HORIZONTAL , // 图表方向:水平
PlotOrientation.VERTICAL , // 图表方向:垂直
true, // 是否显示图例(对于简单的柱状图必须是false)
false, // 是否生成工具
false // 是否生成URL链接
);
//重新设置图标标题,改变字体
chart.setTitle(new TextTitle("图书销量统计图", new Font("黑体", Font.ITALIC , 22)));
//取得统计图标的第一个图例
LegendTitle legend = chart.getLegend(0);
//修改图例的字体
legend.setItemFont(new Font("宋体", Font.BOLD, 14));
CategoryPlot plot = (CategoryPlot)chart.getPlot();

//设置柱状图到图片上端的距离
ValueAxis rangeAxis = plot.getRangeAxis();
rangeAxis.setUpperMargin(0.1);
//取得横轴
CategoryAxis categoryAxis = plot.getDomainAxis();
//设置横轴显示标签的字体
categoryAxis.setLabelFont(new Font("宋体" , Font.BOLD , 22));
//分类标签以45度角倾斜
categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
categoryAxis.setTickLabelFont(new Font("宋体" , Font.BOLD , 18));
//取得纵轴
NumberAxis numberAxis = (NumberAxis)plot.getRangeAxis();
//设置纵轴显示标签的字体
numberAxis.setLabelFont(new Font("宋体" , Font.BOLD , 22));

//在柱体的上面显示数据
BarRenderer custombarrenderer3d = new BarRenderer();
custombarrenderer3d.setBaseItemLabelPaint(Color.BLACK);//数据字体的颜色
custombarrenderer3d
  .setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
custombarrenderer3d.setBaseItemLabelsVisible(true);
plot.setRenderer(custombarrenderer3d);

FileOutputStream fos = null;
fos = new FileOutputStream("d:book1.jpg");
//将统计图标输出成JPG文件
ChartUtilities.writeChartAsJPEG(
fos, //输出到哪个输出流
1, //JPEG图片的质量,0~1之间
chart, //统计图标对象
800, //宽
600,//宽
null //ChartRenderingInfo 信息
);
fos.close();
}
//返回一个CategoryDataset实例
private static CategoryDataset getDataSet()
{
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(45000 , "北京" , "Spring2.0宝典");
dataset.addValue(38000 , "北京" , "轻量级J2EE企业实战");
dataset.addValue(24000 , "北京" , "基于J2EE的Ajax宝典");
dataset.addValue(32000 , "北京" , "JavaScript权威指南");
dataset.addValue(21000 , "北京" , "Ajax In Action");
dataset.addValue(37000 , "上海" , "Spring2.0宝典");
dataset.addValue(36000 , "上海" , "轻量级J2EE企业实战");
dataset.addValue(34000 , "上海" , "基于J2EE的Ajax宝典");
dataset.addValue(42000 , "上海" , "JavaScript权威指南");
dataset.addValue(12000 , "上海" , "Ajax In Action");
dataset.addValue(42000 , "广州" , "Spring2.0宝典");
dataset.addValue(40000 , "广州" , "轻量级J2EE企业实战");
dataset.addValue(34000 , "广州" , "基于J2EE的Ajax宝典");
dataset.addValue(18000 , "广州" , "JavaScript权威指南");
dataset.addValue(26000 , "广州" , "Ajax In Action");
return dataset;
}
}

饼状图

package test;
import java.awt.Color;
import java.awt.Font;
import java.io.File;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.labels.StandardPieSectionLabelGenerator;
import org.jfree.chart.plot.PiePlot3D;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.DefaultPieDataset;
public class testPieChart {
public static void main(String []args){
  DefaultPieDataset dataset = new DefaultPieDataset();
  dataset.setValue(" 市场前期", new Double(10));
  dataset.setValue(" 立项", new Double(15));   
  dataset.setValue(" 计划", new Double(10));   
  dataset.setValue(" 需求与设计", new Double(10));   
  dataset.setValue(" 执行控制", new Double(35));   
  dataset.setValue(" 收尾", new Double(10));   
  dataset.setValue(" 运维",new Double(10));   
  JFreeChart chart = ChartFactory.createPieChart3D("项目状态分布", dataset,
      true, true, false);
    PiePlot3D plot = (PiePlot3D) chart.getPlot();
    // 图片中显示百分比:默认方式
    // plot.setLabelGenerator(new
    // StandardPieSectionLabelGenerator(StandardPieToolTipGenerator.DEFAULT_TOOLTIP_FORMAT));
    // 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
    plot.setLabelGenerator(new StandardPieSectionLabelGenerator(
      "{0}({2})", NumberFormat.getNumberInstance(),
      new DecimalFormat("0.00%")));
    // 图例显示百分比:自定义方式, {0} 表示选项, {1} 表示数值, {2} 表示所占比例
    plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator(
      "{0}={1}({2})"));
    // 设置背景色为白色
    chart.setBackgroundPaint(Color.white);
    // 指定图片的透明度(0.0-1.0)
    plot.setForegroundAlpha(1.0f);
    // 指定显示的饼图上圆形(false)还椭圆形(true)
    plot.setCircular(true);
    // 设置图标题的字体
    Font font = new Font(" 黑体", Font.CENTER_BASELINE, 20);
    TextTitle title = new TextTitle("项目状态分布");
    title.setFont(font);
    chart.setTitle(title);
    plot.setLabelFont(new Font("SimSun", 0, 12));//
    LegendTitle legend = chart.getLegend(0);
    legend.setItemFont(new Font("宋体", Font.BOLD, 14));

  try {
     ChartUtilities.saveChartAsJPEG(
       new File("d:\\PieTest9.jpg"), //输出到哪个输出流
       1, //JPEG图片的质量,0~1之间
       chart, //统计图标对象
       640, //宽
       300,//宽
       null //ChartRenderingInfo 信息
       );
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    } 
}

}

折线图

package chart;
import java.awt.Font;
import javax.swing.JPanel;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.LegendTitle;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;
public class LineCharts extends ApplicationFrame {
public LineCharts(String s) {
  super(s);
  setContentPane(createDemoLine());
}
public static void main(String[] args) {
  LineCharts fjc = new LineCharts("折线图");
  fjc.pack();
  RefineryUtilities.centerFrameOnScreen(fjc);
  fjc.setVisible(true);
}
// 生成显示图表的面板
public static JPanel createDemoLine() {
  JFreeChart jfreechart = createChart(createDataset());
  return new ChartPanel(jfreechart);
}
// 生成图表主对象JFreeChart
public static JFreeChart createChart(DefaultCategoryDataset linedataset) {
  // 定义图表对象
  JFreeChart chart = ChartFactory.createLineChart("折线图", // chart title
    "时间", // domain axis label
    "销售额(百万)", // range axis label
    linedataset, // data
    PlotOrientation.VERTICAL, // orientation
    true, // include legend
    true, // tooltips
    false // urls
    );
  CategoryPlot plot = chart.getCategoryPlot(); 
  // 设置图示字体 
  chart.getTitle().setFont(new Font("宋体", Font.BOLD, 22));   
  //设置横轴的字体
  CategoryAxis categoryAxis = plot.getDomainAxis();
  categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 22));//x轴标题字体 
  categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 18));//x轴刻度字体

  //以下两行 设置图例的字体
  LegendTitle legend = chart.getLegend(0);
  legend.setItemFont(new Font("宋体", Font.BOLD, 14));
  //设置竖轴的字体
  NumberAxis rangeAxis = (NumberAxis) plot.getRangeAxis();
  rangeAxis.setLabelFont(new Font("宋体" , Font.BOLD , 22)); //设置数轴的字体
  rangeAxis.setTickLabelFont(new Font("宋体" , Font.BOLD , 22));
 
  rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());//去掉竖轴字体显示不全
  rangeAxis.setAutoRangeIncludesZero(true);
  rangeAxis.setUpperMargin(0.20);
  rangeAxis.setLabelAngle(Math.PI / 2.0);
  return chart;
}

// 生成数据
public static DefaultCategoryDataset createDataset() {
  DefaultCategoryDataset linedataset = new DefaultCategoryDataset();
  // 各曲线名称
  String series1 = "冰箱";
  String series2 = "彩电";
  String series3 = "洗衣机";
  // 横轴名称(列名称)
  String type1 = "1月";
  String type2 = "2月";
  String type3 = "3月";
  linedataset.addValue(0.0, series1, type1);
  linedataset.addValue(4.2, series1, type2);
  linedataset.addValue(3.9, series1, type3);
  linedataset.addValue(1.0, series2, type1);
  linedataset.addValue(5.2, series2, type2);
  linedataset.addValue(7.9, series2, type3);
  linedataset.addValue(2.0, series3, type1);
  linedataset.addValue(9.2, series3, type2);
  linedataset.addValue(8.9, series3, type3);
  return linedataset;
}

}
分享到:
评论

相关推荐

    JFreeChart 官方例子 JFReeChart Dome

    通过深入研究JFreeChart的官方示例,开发者能够熟练掌握如何创建、配置和控制各种图表,从而提升项目中的数据可视化能力。无论是为了教学、分析还是展示,JFreeChart都是Java环境中一个非常有价值的工具。

    JfreeChart学习总结

    总的来说,JFreeChart是Java环境下强大的图形解决方案,虽然配置和使用可能需要一定的学习成本,但其丰富的功能和灵活性使其成为数据可视化的首选库之一。开发者可以通过深入研究源码和社区资源,进一步掌握其高级...

    jfreechart_demo.zip

    JFreeChart是一个强大的Java图表库,它允许程序员创建多种类型的高质量图表,如柱状图、饼图、线图、...通过学习和研究这些示例,你可以快速掌握JFreeChart的使用方法,从而在自己的项目中实现美观、高效的图表展示。

    JFreeChart范例源码集

    **正文** JFreeChart是一款强大的Java图形库,它允许开发者创建高质量的图表,包括线图、柱状图、...通过研究这些示例,你可以深入理解如何利用JFreeChart库来创建专业且功能丰富的图形,从而提升你的项目视觉表现力。

    jfreeChart几个简单例子

    3. **研究示例代码**:逐行阅读和理解代码,注意关键的类和方法,如 `ChartFactory`、`CategoryDataset`、`JFreeChart`、`ChartPanel` 等。 4. **动手实践**:尝试修改示例代码,如改变图表类型、颜色、数据源等,...

    JFreeChart示例

    总结来说,"JFreeChart示例"是一个宝贵的资源,它涵盖了JFreeChart库的广泛功能,可以帮助开发者学习如何在Java应用程序中创建和展示各种图表。通过对"JFreeChartTest"文件的研究,你可以深入了解JFreeChart的工作...

    jfreechart-1.0.19demo源码

    通过深入研究"jfreechart-1.0.19demo源码",开发者不仅可以掌握JFreeChart的使用,还能提升对Java图形用户界面(GUI)编程的理解,以及在实际项目中如何将数据可视化。同时,这也为有经验的开发者提供了一个平台,以...

    JFreeChart网页版Demo

    本Demo通过JFreeChart展示了如何在网页上有效地展示数据,同时利用FusionCharts的色彩设计提升图表的视觉效果,是学习和实践Java图表开发的宝贵资源。开发者可以通过研究`demo.jsp`和`demo2.jsp`,了解具体的实现...

    jfreechart

    总的来说,JFreeChart 是一个强大的 Java 图表库,无论是在学术研究、商业分析还是教学中都有广泛的应用。通过深入学习和使用其提供的API,开发者可以创建出符合需求的、具有专业视觉效果的图表。

    JFreeChart Demo源代码

    通过深入研究"JFreeChart Demo源代码",你可以掌握创建复杂、美观图表的技巧,从而在Java应用程序中实现强大的数据可视化。同时,这些示例也可以作为模板,帮助你快速构建自己的图表组件。对于Java开发人员尤其是...

    jfreechart官方demo

    8. **source.zip**和**source**: 这些是JFreeChart源代码的压缩包,供开发者学习和研究。通过查看源代码,你可以更深入地理解JFreeChart的工作原理,并进行二次开发。 9. **experimental**: 这可能包含JFreeChart的...

    jfreechart1.0.17相关jar包及学习API

    如果需要更复杂的定制,可以深入研究`Chart`、`Plot`、`CategoryDataset`和`ValueAxis`等类,以及它们的子类和接口。 总的来说,JFreeChart 1.0.17提供了全面的图表解决方案,无论你是要创建简单的报告图表还是复杂...

    jfreechart 1.0.8 演示+例子源码

    通过深入研究这些源码,开发者可以了解到如何使用JFreeChart的API来实现以下功能: - 创建CategoryDataset并填充数据。 - 创建特定类型的Chart(如JFreeChart对象),并设置所需的图表参数。 - 将Chart嵌入到JFrame...

    jFreeChartDemo

    **jFreeChartDemo详解** **一、jFreeChart简介** jFreeChart是一个强大的Java图表库,它...通过深入研究jFreeChartDemo,你可以提升自己的数据可视化能力,更好地利用jFreeChart为你的项目增添生动、直观的图表展示。

    JfreeChart Demo

    总的来说,“JfreeChart Demo”是一个很好的学习资源,它通过实例展示了JFreeChart的强大功能和易用性。通过研究这些示例,开发者能够更好地理解和运用JFreeChart来创建各种复杂的图表,提升数据可视化的专业水平。

    JFreeChart画曲线图

    学习并理解JFreeChart的使用,对于需要在Java应用中展示复杂数据的开发者来说,是非常有价值的。不仅可以创建美观的图形,还可以通过定制实现各种专业级的图表功能。如果你深入研究这个库,你会发现JFreeChart还支持...

    jfreechart-1.0.17demo源码

    首先,JFreeChart 1.0.17 Demo 源码是学习和理解该库功能的重要资源。通过阅读和分析这些源代码,开发者可以了解到如何创建、定制以及操作各种类型的图表。其中,`SuperDemo`是运行入口,它是整个Demo的核心,包含了...

    jfreechart-1.0.9源码及例子

    《JFreeChart 1.0.9:源码解析与实战指南》...总结,JFreeChart 1.0.9不仅是一个强大的图表库,也是学习数据可视化的良好起点。通过深入源码,结合实例,开发者可以熟练掌握其用法,为Java图形化应用开发打下坚实基础。

    jfreechart图表工程,可以导入测试

    综上所述,这个 JFreeChart 图表工程不仅提供了饼图和柱状图的实现,还可能包含了导入和测试的过程,对于学习和使用 JFreeChart 创建图表的开发者来说,是一份非常有价值的资源。通过深入研究和实践,你可以掌握如何...

Global site tag (gtag.js) - Google Analytics