• 利用JFreeChart生成折线图 (4) (转自 JSP开发技术大全)


    利用JFreeChart生成折线图 (4) (转自 JSP开发技术大全)

    14.4 利用JFreeChart生成折线图

    通过JFreeChart插件,既可以生成普通效果的折线图,也可以生成3D效果的折线图。如果想生成普通效果的折线图,需要通过工厂类ChartFactory的createLineChart()方法获得JFreeChart类的实例;如果想生成3D效果的折线图,需要通过工厂类ChartFactory的createLineChart3D()方法获得JFreeChart类的实例。这两个方法的入口参数是完全相同的,各个入口参数的类型及功能请参见14.2.1节的表14.2。

    可以分别通过绘图区对象CategoryPlot的getDomainAxis()方法和getRangeAxis()方法,获得横轴对象和纵轴对象,通过得到的轴对象可以设置绘制坐标轴的相关属性,常用方法及实现功能如表14.4所示。

    表14.4                                        设置坐标轴绘制属性的部分通用方法

    通 用 方 法

    实 现 功 能

    setAxisLineStroke(Stroke stroke)

    通过该方法可以设置轴线的粗细

    setAxisLinePaint(Paint paint)

    通过该方法可以设置轴线的颜色

    setLabelFont(Font font)

    通过该方法可以设置坐标轴标题的字体

    setLabelPaint(Paint paint)

    通过该方法可以设置坐标轴标题的颜色

    纵轴对象还提供了设置坐标最大值的方法setUpperBound(double max),在默认情况下将最大值控制在能够正常绘制统计图的范围内。

    通过java.awt.BasicStroke类可以绘制出各种各样的线段,大体分为实线段和虚线段,可控的绘制条件包括线条的宽度、线段端点的风格、折线段的折点风格、虚线段的绘制风格和虚线段的绘制偏移量,BasicStroke类提供的所有构造方法如表14.5所示。

    表14.5                                           BasicStroke类提供的所有构造方法

    构 造 方 法

    使 用 说 明

    BasicStroke()

    创建一个实线对象,各控制条件均采用默认值,宽度为1.0,端点风格为CAP_SQUARE,折点风格为JOIN_MITER,折点控制值为10.0

    BasicStroke(float width)

    创建一个指定宽度的实线对象,其他参数仍采用默认值

    BasicStroke(float width, int cap, int join)

    创建一个指定宽度、指定端点风格和指定折点风格的实线对象,折点控制值仍采用默认值10.0

    BasicStroke(float width, int cap, int join, float miterlimit)

    创建一个指定宽度、指定端点风格、指定折点风格和指定折点控制值的实线对象

    BasicStroke(float width, int cap, int join, float miterlimit, float dash[], float dash_phase)

    通过该构造方法,既可以创建实线对象,又可以创建虚线对象,当将参数dash设为null时,创建的即为实线对象,如果将其设为float型数组,创建的则为虚线对象,最后一个参数用来设置开始绘制虚线的偏移量

    线段端点的修饰风格有3种,分别由3个常量表示,具体信息如表14.6所示。

    表14.6                                                    线段端点修饰风格简介

    常 量 名 称

    常 量 值

    修 饰 办 法

    BasicStroke.CAP_BUTT

    0

    对线段端点不加任何修饰

    BasicStroke.CAP_ROUND

    1

    在线段端点加半圆进行修饰,半圆的直径为线段的宽度

    BasicStroke.CAP_SQUARE

    2

    在线段端点加矩形进行修饰,矩形的宽度为线段宽度的一半,矩形的高度为线段的宽度

    线段折点的修饰风格同样有3种,也由3个常量表示,具体信息如表14.7所示。

    表14.7                                                    线段折点修饰风格简介

    常 量 名 称

    常 量 值

    修 饰 办 法

    BasicStroke.JOIN_MITER

    0

    对线段折点不加任何修饰

    BasicStroke.JOIN_ROUND

    1

    在折线段的两端加半圆进行修饰,半圆的直径为线段的宽度

    BasicStroke.JOIN_BEVEL

    2

    将组成折点的两条线段的外侧延长至相交,然后填充被包的区域

    入口参数dash用来定义虚线,为float型数组,当dash数组由偶数个元素组成时,索引值为偶数的元素值代表虚线段的长度,索引值为奇数的元素值代表两个虚线段之间的空白部分的长度,需要注意的是,数组的索引值是从0开始的;当数组中只有一个元素时,例如dash={6},等同于dash={6,6}。

    *   注意:建议不要为dash数组设定奇数个元素,那样将无法把握虚线的绘制规律,为一个元素的情况除外。

    入口参数dash_phase用来定义虚线开始绘制位置的偏移量。以dash={6}为例,如果dash_phase=0,则虚线正常绘制;如果dash_phase=3,则第一段短化线的长度为6-3,后面则正常绘制。

     示例14-04 编程类图书年销量折线图分析

    下面来看一个绘制折线图的例子,该例绘制的折线图效果如图14.6和图14.7所示。

             

                 图14.6 普通效果的折线图                              图14.7 3D效果的折线图

    代码14-04 光盘位置:光盘mingrisoft14sl4

    下面的代码负责定义折线的绘制风格,并将指定的图例用实线绘制,代码如下:

    BasicStroke realLine = new BasicStroke(1.6f);

    float dashes[] = { 8.0f };     // 定义虚线数组

    BasicStroke brokenLine = new BasicStroke(1.6f,     // 线条粗细

          BasicStroke.CAP_ROUND,     // 端点风格

          BasicStroke.JOIN_ROUND,     // 折点风格

          8.f,     // 折点处理办法

          dashes,     // 虚线数组

          0.0f);     // 虚线偏移量

    int special = 1;     // 定义利用需线绘制的图例

    for (int i = 0; i < cutline.length; i++) {

       if (i == special) {

           renderer.setSeriesStroke(i, realLine);     // 利用实线绘制

       } else {

          renderer.setSeriesStroke(i, brokenLine);     // 利用虚线绘制

       }

    }

    下面的代码负责获得横轴对象,并设置相关的绘图属性,代码如下:

    CategoryAxis domainAxis = plot.getDomainAxis();

    domainAxis.setAxisLineStroke(new BasicStroke(1.6f));     // 设置轴线粗细

    domainAxis.setAxisLinePaint(Color.BLACK);     // 设置轴线颜色

    domainAxis.setCategoryLabelPositionOffset(5);     // 设置统计种类与轴线的颜色

    domainAxis.setLabelFont(new Font("黑体", Font.BOLD, 16));     // 设置坐标轴标题字体

    domainAxis.setLabelPaint(Color.BLACK);     // 设置坐标轴标题颜色

    // 设置坐标轴标题旋转角度,这里并未旋转,目的是告诉读者这个方法

    domainAxis.setCategoryLabelPositions(CategoryLabelPositions.STANDARD);

    下面的代码负责获得纵轴对象,并设置相关的绘图属性,代码如下:

    ValueAxis rangeAxis = plot.getRangeAxis();

    rangeAxis.setAxisLineStroke(new BasicStroke(1.6f));     // 设置轴线粗细

    rangeAxis.setAxisLinePaint(Color.BLACK);     // 设置轴线颜色

    rangeAxis.setUpperBound(100.0f);     // 设置坐标最大值

    rangeAxis.setTickMarkStroke(new BasicStroke(1.6f));     // 设置坐标标记大小

    rangeAxis.setTickMarkPaint(Color.BLACK);     // 设置坐标标记颜色

    rangeAxis.setLabelFont(new Font("黑体", Font.BOLD, 16));     // 设置坐标轴标题字体

    rangeAxis.setLabelPaint(Color.BLACK);     // 设置坐标轴标题颜色

    rangeAxis.setLabelAngle(Math.PI / 2);     // 设置坐标轴标题旋转角度

  • 相关阅读:
    【原】ios打包ipa的四种实用方法(.app转.ipa)
    【原】Mac下统计任意文件夹中代码行数的工具——cloc
    【原+转】用CMake代替makefile进行跨平台交叉编译
    【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
    【原】Github系列之一:一起做仿天气类应用中的实时模糊效果LiveBlur
    【原】iOS:一种直接修改frame的某个属性的方法
    【原】iOS优秀开源项目总结
    【原】你真的懂iOS的autorelease吗?
    【原】iOS容易造成循环引用的三种场景,就在你我身边!
    Failure [DELETE_FAILED_INTERNAL_ERROR]之后rm apk卸载
  • 原文地址:https://www.cnblogs.com/meimao5211/p/3262041.html
Copyright © 2020-2023  润新知