JFreeChart核心类

来源:互联网 发布:淘宝客官方助手 编辑:程序博客网 时间:2024/05/17 23:42

核心类主要有:
org.jfree.chart.JFreeChart
图表对象,任何类型的图表的最终表现形式都是在该对象进行一些属性的定制。

                                        JFreeChart引擎本身提供了一个工厂类用于创建不同类型的图表对象


org.jfree.data.category.XXXDataSet:
数据集对象,用于提供显示图表所需数据。根据不同类型图表对应不同类型数据集对象类
org.jfree.chart.plot.XXXPlot
图表区域对象,该对象决定着什么样式的图表,创建该对象时需Axis ,Renderer以及数据集对象支持 
               org.jfree.chart.axis.XXXAxis
:用于处理图表的两个轴:纵轴和横轴
      org.jfree.chart.render.XXXRender
:负责如何显示一个图表对象
org.jfree.chart.urls.XXXURLGenerator:
用于生成Web图表中每个项目的鼠标点击链接
                   XXXXXToolTipGenerator:
用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类

 表5.1 JFreeChart核心类及其功能

JFreeChart    图表对象

          ----通过该对象生成任何类型的图表,JFreeChart插件提供了一个工厂类ChartFactory,用来创建各种类型的图表对象

XXXDataset    数据集对象

         ----用来保存绘制图表所需的数据,不同类型的图表对应着不同类型的数据集对象

XXXPlot          绘图区对象

         ----如果需要自定义绘图区的相关绘制属性,需要通过该对象进行设置

XXXAxis                        坐标轴对象       -----用来定义坐标轴的绘制属性

XXXRenderer              图片渲染对象       -----用于渲染和显示图表

XXXURLGenerator            链接对象        -----用于生成Web图表中项目的鼠标单击链接

XXXToolTipGenerator  图表提示对象。   

           ----用于生成图表提示信息,不同类型的图表对应着不同类型的图表提示对象

 

通过工厂类ChartFactory,可创建各种类型的图表对象。

例如:

   JFreeChart jfreechart =ChartFactory.createXXXXChart("","","",dataset,PlotOrientation.VERTICAL,true,true,false);

常用的创建JFreeChart实例的方法及其功能如下。

ChartFactory类中常用方法及其功能

==柱状图

createBarChart()        创建绘制普通柱形图JFreeChart实例,基于DefaultCategoryDataset类型的数据集

createBarChart3D()    创建绘制3D柱形图JFreeChart实例,基于DefaultCategoryDataset类型的数据集

createXYBarChart()     创建绘制普通柱形图的JFreeChart实例,基于TimeSeries类型的数据集,

                                   ------TimeSeries数据集主要用来绘制与日期和时间相关的统计图

createStackedBarChart()和createStackedBarChart3D()   它们同createBarChart()和createBarChart3D()的功能相同。

                                   ------只是绘制出的柱形图效果不同,它们可以互换使用

==饼图

createPieChart()        绘制普通饼图的JFreeChart实例,基于DefaultPieDataset类型的数据集

createPieChart3D()   绘制3D饼图的JFreeChart实例,基于DefaultPieDataset类型的数据集

==折线图

createLineChart()     绘制普通折线图的JFreeChart实例,基于DefaultCategoryDataset类型的数据集

createLineChart3D()  绘制3D折线图的JFreeChart实例,基于DefaultCategoryDataset类型的数据集

createXYLineChart()   绘制普通折线图的JFreeChart实例,它基于的是TimeSeries类型的数据集。

                                          -----TimeSeries数据集主要用来绘制与日期和时间相关的统计图。

==区域图

createAreaChart()      绘制普通区域图的JFreeChart实例,它基于的是DefaultCategoryDataset类型的数据集

createXYAreaChart()   绘制普通区域图的JFreeChart实例,它基于的是TimeSeries类型的数据集。

                                          -----TimeSeries数据集主要用来绘制与日期和时间相关的统计图

==时序图

createTimeSeriesChart()   绘制普通时序图JFreeChart实例。

       时序图与折线图有些类似,不过时序图提供了绘制移动平均线的功能,通过给定的数据集实例,可以自动计算任意时间段的移

动平均值,它基于的是TimeSeries类型的数据集,TimeSeries数据集主要用来绘制与日期和时间相关的统计图

 

注意ChartFactory类中的所有方法均需要传入一个数据集实例,并且返回值类型均为JFreeChart!

若通过工厂类ChartFactory创建JFreeChart实例,可以通过ChartFactory类提供的方法获得绘图区实例;

若通过JFreeChart类创建JFreeChart实例,则需在创建JFreeChart实例之前订制好绘图区实例,然后在创建时传入

常用的绘图区类及其功能请参见表5.3。

CategoryPlot       在绘制基于DefaultCategoryDataset数据集的柱形图、折线图、区域图时,绘图区为该类型

PiePlot                 在绘制普通饼形图时,绘图区为该类型

PiePlot3D             在绘制3D饼形图时,绘图区为该类型

XYPlot                  在绘制基于TimeSeries数据集的柱形图,折线图,区域图时,绘图区为该类型。

上面介绍的几个绘图区类均继承于Plot类。

    ----Plot类提供的经常用来订制绘图区绘制属性的方法及其功能如下

Plot类提供的常用方法及其功能

setBackgroundPaint(Paint paint)          用来设置绘图区的背景色

setBackgroundAlpha(float alpha)         用来设置绘图区背景的透明度,参数在0.0和1.0之间,数值越大透明度越低

setForegroundAlpha(float alpha)         用来设置绘图区前景的透明度,参数在0.0和1.0之间,数值越大透明度越高

setNoDataMessage(String message)    用来设置在没有绘图数据时在绘图区显示的提示信息

setNoDataMessageFont(Font font)       用来设置没有绘图数据时显示的提示信息的字体

setNoDataMessagePaint(Paint paint)    用来设置没有绘图数据时显示的提示信息的颜色

 

CategoryPlot类提供的经常用来订制绘图区绘制属性的方法及其功能如下。

CategoryPlot类提供的常用方法及其功能

setDataset(CategoryDataset dataset)  设置绘图数据集实例 第一个参数采用默认标识值(0)。

setDataset(int, CategoryDataset)     设置绘图数据集实例 第一个参数为数据集的唯一标识值 

若在一个绘图区中只包含一个分类轴和一个数值轴,建议使用前者; 否则,一定要通过后者为每个数据集实例指定一个唯一标识值

setDomainAxis(CategoryAxis axis)      用来设置分类轴实例

setDomainAxisLocation(AxisLocation location)    用来设置分类轴的绘制位置,

                                                                           ----入口参数常量在org.jfree.chart.axis.AxisLocation类中做了定义

setDomainGridlinesVisible(boolean visible)     用来设置分类轴标记线是否可见,默认为不可见(false)

setDomainGridlineStroke(Stroke stroke)          用来设置分类轴标记线的绘制风格

setDomainGridlinePaint(Paint paint)                 用来设置分类轴标记线的颜色

setRangeAxis(ValueAxis axis)                            用来设置数据轴实例

setRangeAxisLocation(AxisLocation location)    用来设置数据轴的绘制位置

                                                                           ----入口参数常量在org.jfree.chart.axis.AxisLocation类中做了定义

setRangeGridlinesVisible(boolean visible)     用来设置数据轴标记线是否可见,默认为可见(true)

setRangeGridlineStroke(Stroke stroke)          用来设置数据轴标记线的绘制风格

setRangeGridlinePaint(Paint paint)                用来设置数据轴标记线的颜色

mapDatasetToDomainAxis(int, int)               用来将指定标识值的绘图数据集与分类轴建立关联

mapDatasetToRangeAxis(int, int)                用来将指定的标识值的绘图数据集与数据轴建立关联

 

PiePlot类提供的经常用来订制绘图区绘制属性的方法及其功能如下。

PiePlot类提供的常用方法及其功能

setCircular(boolean flag)        用来设置饼图为正圆还是椭圆,默认为正圆(true)。

                                                -------建议在绘制普通饼图时采用正圆,在绘制3D饼图时采用椭圆

setStartAngle(double angle)  用来设置饼图第一段圆弧的起始绘制角度,默认为在饼图的正上方开始绘制。

                                              --------水平方向饼图的最左侧为0度,最右侧为180度;

                                              --------垂直方向饼图的正上方为90度,正下方为270度

setDirection(Rotation direction)   用来设置饼图的绘制方向,默认为按顺时针方向绘制。

                                              --------Rotation.CLOCKWISE代表顺时针

                                              --------Rotation.ANTICLOCKWISE代表逆时针

setLegendLabelGenerator(PieSectionLabelGenerator generator)      用来设置饼图中图例的输出样式

setLabelGenerator(PieSectionLabelGenerator generator) 设置饼图中普通标签的输出样式,为NULL时,不显示普通标签及连线

setLabelFont(Font font)                          用来设置饼图中普通标签的字体样式

setLabelPaint(Paint paint)                       用来设置饼图中普通标签的字体颜色

setLabelBackgroundPaint(Paint paint)     用来设置饼图中普通标签的背景颜色

setLabelOutlinePaint(Paint paint)            用来设置饼图中普通标签的边框颜色

setLabelLinkPaint(Paint paint)                用来设置饼图中普通标签与圆弧之间连接线的颜色

setSectionPaint(Comparable, Paint)       用来设置饼图中代表指定图例的扇形的填充色

setToolTipGenerator(PieToolTipGenerator generator)         用来设置热点饼图中热区标签的输出样式

setURLGenerator(PieURLGenerator generator)                     用来设置热点饼图中热区链接的URL

setIgnoreNullValues(boolean flag)        用来设置是否显示绘图数据设为NULL的图例,默认为显示(false)

setIgnoreZeroValues(boolean flag)       用来设置是否显示绘图数据设为0的图例,默认为false

PiePlot3D类仅提供了一个用来设置3D饼图Z轴高度的方法setDepthFactor(double factor)。

 

XYPlot类提供的经常用来订制绘图区绘制属性的方法及其功能如下。

XYPlot类提供的常用方法及其功能

setDataset(CategoryDataset dataset)设置绘图数据集实例,第一个参数采用默认标识值(0)。

setDataset(int, CategoryDataset)      设置绘图数据集实例,第一个参数为数据集的唯一标识值。

    若在一个绘图区中只包含一个分类轴和一个数值轴,建议使用前者;否则,一定要通过后者为每个数据集实例指定一个唯一标识值

setDomainAxis(CategoryAxis axis)                用来设置分类轴实例

setDomainAxisLocation(AxisLocation location)    用来设置分类轴的绘制位置。

                                                       ------------入口参数常量在org.jfree.chart.axis.AxisLocation类中做了定义

setDomainGridlinesVisible(boolean visible)        用来设置分类轴标记线是否可见,默认为不可见(false)

setDomainGridlineStroke(Stroke stroke)            用来设置分类轴标记线的绘制风格

setDomainGridlinePaint(Paint paint)                   用来设置分类轴标记线的颜色

setRangeAxis(ValueAxis axis)                           用来设置数据轴实例

setRangeAxisLocation(AxisLocation location)      用来设置数据轴的绘制位置

                                                       -------------入口参数常量在org.jfree.chart.axis.AxisLocation类中做了定义

setRangeGridlinesVisible(boolean visible)         用来设置数据轴标记线是否可见,默认为可见(true)

setRangeGridlineStroke(Stroke stroke)              用来设置数据轴标记线的绘制风格

setRangeGridlinePaint(Paint paint)                    用来设置数据轴标记线的颜色

mapDatasetToDomainAxis(int, int)                    用来将指定标识值的绘图数据集与分类轴建立关联

mapDatasetToRangeAxis(int, int)                      用来将指定标识值得绘图数据集与数据轴建立关联

 

可以通过绘图区实例获得坐标轴实例,然后设置坐标轴的绘制属性;也可以将设置好的坐标轴实例传入到绘图区实例中。

 

常用的坐标轴类及其功能如下。

常用的坐标轴类及其功能

CategoryAxis                用来定义分类型坐标轴

ValueAxis                     用来定义数值型坐标轴,包括普通的数值型和日期型

NumberAxis                 用来定义普通数值型坐标轴

DateAxis                      用来定义日期型坐标轴

Axis类是如上几个坐标轴类的父类,Axis类提供的经常用来订制绘图区绘制属性的方法及其功能如下。

setLabel(String label)                                      用来设置坐标轴标题

setLabelFont(Font font)                                   用来设置坐标轴标题的字体

setLabelPaint(Paint paint)                               用来设置坐标轴标题的颜色

setLabelAngle(double angle)                          用来设置坐标轴标题的旋转角度

setTickLabelFont(Font font)                            用来设置坐标轴标尺值的字体

setTickLabelPaint(Paint paint)                         用来设置坐标轴标尺值的颜色

setTickMarkStroke(Stroke stroke)                   用来设置坐标轴标尺标记的笔触

setTickMarkPaint(Paint paint)                          用来设置坐标轴标尺标记的颜色

CategoryAxis类提供的经常用来订制绘图区绘制属性的方法及其功能如下。

        setLowerMargin(double margin)          用来设置分类轴的下边距

        setUpperMargin(double margin)          用来设置分类轴的上边距

        setCategoryMargin(double margin)     用来设置分类轴之间的间距

setMaxCategoryLabelWidthRatio(float ratio)  设置显示分类轴标记内容的最大比例。

                                                                   如果设为1,表示可以显示标记内容的最大长度与绘图所占宽度相同

ValueAxis类NumberAxis类DateAxis类的父类。

            ValueAxis类提供的经常用来订制绘图区绘制属性的方法及其功能如下。

setFixedAutoRange(double length)  用来动态设置数据轴的标尺范围。

                                               ---例如设置入口参数为100,表示数据轴的标尺范围为从(MaxValue-100)到(MaxValue)

setLowerBound(double min)    用来设置数据周标尺值得最小值

============================================================

例子==使用xyplot.getRangeAxis()得到纵轴,xyplot.getDomainAxis()得到横轴。   

    //图表纵轴为数值类型,横轴为时间类型,使用如下方式:
            NumberAxis    numAxis = (NumberAxis)xyplot.getRangeAxis();
            DateAxis          dateaxis = (DateAxis)xyplot.getDomainAxis();
  

     //设置y显示方式
       numAxis.setAutoTickUnitSelection(false);//数据轴的数据标签是否自动确定
       numAxis.setTickUnit(new NumberTickUnit(5D));  //y轴单位间隔为5

       numAxis.setTickLabelFont(new Font("Times New Roman",Font.PLAIN,9)) ;//坐标轴标尺值字体、颜色
       numAxis.setTickLabelPaint(new Color(255,0,0));

       numAxis.setLabelFont(new Font("宋体",Font.BOLD,10));//设置纵轴的标签(字体)、颜色
       numAxis.setLabelPaint(new Color(90,90,90));   

    //设置x轴显示方式
        dateaxis.setAutoTickUnitSelection(false);//x轴的数据标签是否自动确定
        dateaxis.setDateFormatOverride(new SimpleDateFormat("HH:mm"));//x轴的日期显示格式
        dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.MINUTE,60));//x轴单位间隔为60分钟  

    或//dateaxis.setTickUnit(new DateTickUnit(DateTickUnitType.DAY,30));    //x轴单位间隔为30天

    或//设置时间间隔和时间轴显示格式:1个月一个间隔   

      //dateaxis.setTickUnit(new DateTickUnit(DateTickUnit.MONTH, 1, new SimpleDateFormat("MM"))); 

    dateaxis.setTickLabelFont(new Font("Times New Roman",Font.PLAIN,9));   //坐标轴标尺值字体、颜色
    dateaxis.setTickLabelPaint(new Color(255,0,0));