- 浏览: 75683 次
- 性别:
- 来自: 深圳
文章分类
最新评论
JFreeChart是一个Java开源项目,是一款优秀的Java图表生成插件,它提供了在Java Application、Servlet和JSP下生成各种图片格式的图表,包括柱形图、饼形图、线图、区域图、时序图和多轴图等。本章将详细介绍利用JFreeChart生成各种图表的技术要点。
14.1 JFreeChart基础
本节将介绍JFreeChart插件的下载与使用方法,以及JFreeChart插件的核心类及其 功能。
14.1.1 JFreeChart的下载与使用
在JFreeChart的官方网站(http://www.jfree.org/jfreechart/index.html)上可以下载到该插件,该插件有两个版本。
ll freechart-1.0.5.zip,该版本适用于Windows系统。
ll jfreechart-1.0.5.tar.gz,该版本适用于UNIX/Linux系统。
本书所有示例的开发环境均为Windows系统,解压缩jfreechart-1.0.5.zip后将得到一个名为jfreechart-1.0.5的文件夹,只需将lib子文件夹内的如下文件复制到Web应用程序目录中的/WEB-INF/lib目录下。
ll jfreechart-1.0.5.jar。
ll jcommon-1.0.9.jar。
ll junit.jar。
ll gnujaxp.jar。
ll servlet.jar。
并且在web.xml文件中添加如下代码:
<servlet>
<servlet-name>DisplayChart</servlet-name>
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DisplayChart</servlet-name>
<url-pattern>/servlet/DisplayChart</url-pattern>
</servlet-mapping>
这样,就可以利用JFreeChart插件生成动态统计图表了。利用JFreeChart插件生成动态统计图表的基本步骤如下。
(1)创建绘图数据集合。
(2)创建JFreeChart实例。
(3)自定义图表绘制属性,该步可选。
(4)生成指定格式的图片,并返回图片名称。
(5)组织图片浏览路径。
(6)通过HTML中的<img>元素显示图片。
14.1.2 JFreeChart核心类简介
在使用JFreeChart插件之前,先介绍该插件的核心类及其功能,这对将来能够得心应手地使用该插件是非常重要的,JFreeChart核心类及其功能如表14.1所示。
表14.1 JFreeChart核心类及其功能
类 名 |
功 能 |
JFreeChart |
图表对象,生成任何类型的图表都要通过该对象,JFreeChart插件提供了一个工厂类ChartFactory,用来创建各种类型的图表对象 |
XXXDataset |
数据集对象,用来保存绘制图表的数据,不同类型的图表对应着不同类型的数据集对象 |
XXXPlot |
绘图区对象,如果需要自行定义绘图区的相关绘制属性,需要通过该对象进行设置 |
XXXAxis |
坐标轴对象,用来定义坐标轴的绘制属性 |
XXXRenderer |
图片渲染对象,用于渲染和显示图表 |
XXXURLGenerator |
链接对象,用于生成Web图表中项目的鼠标单击链接 |
XXXToolTipGenerator |
图表提示对象,用于生成图表提示信息,不同类型的图表对应着不同类型的图表提示对象 |
通过表14.1,可以简单了解JFreeChart插件中各个类的功能,下面将仔细讲解利用JFreeChart生成各种图表的技术要点。
14.2 利用JFreeChart生成柱形图
14.2.1 利用DefaultCategoryDataset数据集绘制柱形图
通过JFreeChart插件,既可以生成普通效果的柱形图,也可以生成3D效果的柱形图。如果想生成普通效果的柱形图,需要通过工厂类ChartFactory的createBarChart()方法获得JFreeChart类的实例;如果想生成3D效果的柱形图,需要通过工厂类ChartFactory的createBarChart3D()方法获得JFreeChart类的实例,这两个方法的入口参数是完全相同的,各个入口参数的类型及功能如表14.2所示。
表14.2 绘制柱形图方法的入口参数类型及功能
参 数 序 号 |
入 口 参 数 |
参 数 功 能 |
1 |
String title |
图表标题 |
2 |
String categoryAxisLabel |
统计种类轴标题,可以理解为X轴标题 |
3 |
String valueAxisLabel |
统计值轴标题,可以理解为Y轴标题 |
4 |
CategoryDataset dataset |
绘图数据集 |
5 |
PlotOrientation orientation |
用于设定柱形图的绘制方向 垂直:PlotOrientation.VERTICAL 水平:PlotOrientation.HORIZONTAL |
6 |
boolean legend |
用于设定是否显示图例 |
7 |
boolean tooltips |
用于设定是否采用标准生成器 |
8 |
boolean urls |
用于设定是否包生成链接 |
工厂类ChartFactory中的方法的返回值均为JFreeChart类的实例,通过返回的JFreeChart类的实例,可以设置绘图属性,也可以省略该步,直接生成图片,JFreeChart插件将采用默认的绘图属性进行绘制。
可以通过JFreeChart实例设置整个图片的绘制属性,例如通过setBackgroundPaint(Paint paint)方法设置图片的背景色,入口参数可以是Color类的实例,也可以是GradientPaint类的实例,通过GradientPaint类的实例可以实现渐变的背景色效果。
还可以通过JFreeChart实例的getCategoryPlot()方法获得CategoryPlot类的实例,通过CategoryPlot类的实例可以设置绘图区的绘图属性,例如设置绘图区的背景色,标准线的绘制属性等。通过CategoryPlot实例的getRenderer()方法可以获得BarRenderer类的实例,通过BarRenderer类的实例可以设置柱形的绘制属性,例如是否绘制柱形的轮廓线,以及柱形的填充色等,通过BarRenderer实例的setSeriesPaint(int series, Paint paint)方法设置柱形的填充色,第一个入口参数为图例的索引位置,从0开始,第二个入口参数为填充色,同样既可以接受Color类的实例,也可以接受GradientPaint类的实例。
示例14-01 利用DefaultCategoryDataset数据集绘制柱形图
下面来看一个绘制柱形图的完整例子,该例绘制的柱形图效果如图14.1和图14.2所示。
图14.1 当绘图数据全部为正数时绘制出的柱形图 图14.2 当绘图数据存在负数时绘制出的柱形图
代码14-01 光盘位置:光盘\mingrisoft\14\sl\01
绘图时需要用到的相关信息如下:
int width = 500; // 图像宽度
int height = 375; // 图像高度
String chartTitle = "编程类图书年销量柱形图分析"; // 图表标题
String subtitle = "------统计时间:2008年"; // 副标题
String xTitle = "销售时间:2008年"; // X轴标题
String yTitle = "销售量 单位:万册"; // Y轴标题
String[] cutline = new String[] { "ASP", "JSP", "PHP" }; // 图例名称
String category[] = new String[] {"第1季度","第2季度","第3季度","第4季度"}; // 统计种类
Double[][] data = new Double[cutline.length][category.length]; // 绘图数据
for (int m = 0; m < cutline.length; m++) { // 随机获取绘图数据
for (int n = 0; n < category.length; n++) {
data[m][n] = 1 + Math.random() * 100;
}
}
String servletURI = "/servlet/DisplayChart"; // 映射路径
注意:仔细观察上面的for循环代码,会发现外循环是根据图例个数循环的,内循环是根据数据类别个数循环的,所以,在向绘图数据集中添加数据时,是按照图例的顺序添加的,即添加一个图例所有类别数据后再添加另一个图例的数据(对于竖向柱形图来说,并不是按照柱形从左到右的顺序添加数据的)。
说明:上面给出的绘图数据为图14.1的绘图数据,限于篇幅,在这里就不给出图14.2的绘图数据了。
首先通过DefaultCategoryDataset类的实例封装绘图数据,代码如下:
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for (int m = 0; m < cutline.length; m++) {
for (int n = 0; n < category.length; n++) {
dataset.addValue(data[m][n], cutline[m], category[n]);
}
}
本示例绘制3D效果的柱形图,所以通过createBarChart3D()方法获得JFreeChart类的实例,只要改为createBarChart()方法,就可以绘制普通效果的柱形图,代码如下:
JFreeChart chart = ChartFactory.createBarChart3D(chartTitle, // 图表标题
xTitle, // X轴标题
yTitle, // Y轴标题
dataset, // 绘图数据集
PlotOrientation.VERTICAL, // 柱形图绘制方向
True, // 显示图例
True, // 显示图例名称
False // 生成链接
);
下面开始自定义绘图属性,没有下面的代码,同样可以得到漂亮的3D效果的柱形图。
为图片添加副标题,代码如下:
chart.addSubtitle(new TextTitle(subtitle));
将图片的背景色设置为渐变效果,代码如下:
GradientPaint chartGP = new GradientPaint(0, 0,
new Color(219, 227, 251), 0, height, Color.WHITE, False); // 创建渐变色对象
chart.setBackgroundPaint(chartGP); // 设置图片背景色
通过JFreeChart实例的getCategoryPlot()方法获得CategoryPlot类的实例,目的是设置绘图区的绘图属性,代码如下:
CategoryPlot plot = chart.getCategoryPlot();
设置绘图区的相关绘图属性,代码如下:
plot.setBackgroundPaint(new Color(241, 219, 127)); // 设置绘图区背景色
plot.setRangeGridlinePaint(Color.RED); // 设置水平方向背景线颜色
plot.setRangeGridlinesVisible(True); // 设置是否显示水平方向背景线,默认值为True
plot.setDomainGridlinePaint(Color.RED); // 设置垂直方向背景线颜色
plot.setDomainGridlinesVisible(True); // 设置是否显示垂直方向背景线,默认值为False
通过CategoryPlot实例的getRenderer()方法获得BarRenderer类的实例,目的是设置柱形的绘制属性,代码如下:
BarRenderer renderer = (BarRenderer) plot.getRenderer();
在这里不绘制柱形的轮廓线,JFreeChart默认为绘制,代码如下:
renderer.setDrawBarOutline(False);
下面设置柱形的填充颜色,同样采用渐变效果,代码如下:
Color color[] = new Color[cutline.length];
color[0] = new Color(99, 99, 0);
color[1] = new Color(255, 169, 66);
color[2] = new Color(33, 255, 66);
for (int i = 0; i < color.length; i++) {
GradientPaint gp = new GradientPaint(0, 0, color[i].brighter(), 0,
height, color[i].darker());
renderer.setSeriesPaint(i, gp);
}
下面通过CategoryPlot实例的getDomainAxis()方法获得CategoryAxis类的实例,目的是设置统计种类轴标题(X轴)的绘制属性,在这里设置为倾斜45°输出,代码如下:
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
本示例中就定义了上述的这些绘图属性,读者可以尝试着定义其他属性。下面的代码是利用JFreeChart绘制图片时必须用到的,记住就可以了:
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
通过ServletUtilities类的saveChartAsPNG()方法生成PNG格式的图片,并返回图片的名称,如果想生成JPG格式的图片,可以通过ServletUtilities类的saveChartAsJPEG()方法,代码如下:
String fileName = "";
try {
fileName = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);
} catch (IOException e) {}
下面的代码是在组织图片的浏览路径,供显示到JSP页面时使用:
String graphURL = contextPath + servletURI + "?filename=" + fileName;
14.2.2 利用XYDataset数据集绘制柱形图
利用实现XYDataset接口的数据集,也可以绘制柱形图,XYDataset数据集主要用来绘制与日期相关的统计图。
在封装数据集时,首先需要通过TimeSeries类的实例进行封装,TimeSeries类提供了3个构造函数,在这里我们采用入口参数最多的一个,代码如下:
TimeSeries timeSeries = new TimeSeries(chartTitle, xTitle, yTitle, Month.class);
入口参数依次为图表标题、日期轴标题、数据轴标题和统计种类,第二个和第三个入口参数可以为空,第四个入口参数的可选类型如下。
ll Year.class,按年统计。
l Month.class,按月统计。
ll Day.class,按日统计。
ll Hour.class,按小时统计。
ll Minute.class,按分统计。
ll Second.class,按秒统计。
ll Millisecond.class,按毫秒统计。
ll Quarter.class,按一刻钟统计。
ll Week.class,按周统计。
ll FixedMillisecond.class,按指定时间段统计。
通过TimeSeries实例的add()方法向TimeSeries实例中添加统计数据,添加完成后以TimeSeries实例为入口参数创建一个TimeSeriesCollection类的实例,并将TimeSeriesCollection实例直接传给IntervalXYDataset类的实例,代码如下:
TimeSeriesCollection tsc = new TimeSeriesCollection(timeSeries);
IntervalXYDataset dataset = tsc;
说明:类TimeSeriesCollection和类IntervalXYDataset均为XYDataset接口的实现类。
在创建JFreeChart类的实例时,需要通过工厂类ChartFactory的createXYBarChart方法,createXYBarChart方法与14.2.1节使用的createBarChart3D()方法类似,请对照学习。
示例14-02 利用XYDataset数据集绘制与日期相关的柱形图
下面来看一个利用XYDataset数据集绘制柱形图的例子,该例绘制的柱形图效果如图14.3所示。
图14.3 利用XYDataset数据集绘制与日期相关的柱形图
代码14-02 光盘位置:光盘\mingrisoft\14\sl\02
在本示例中可以在前台向后台传入Map集合,Map集合元素的键为日期、值为统计值,本示例中用来创建数据集的代码如下:
Map data = new HashMap(); // 创建绘图数据集
for (int i = 1; i < 13; i++) { // 为绘图数据集赋值
data.put(i, 1 + Math.random() * 100);
}
TimeSeries timeSeries = new TimeSeries(chartTitle, xTitle, yTitle, Month.class);
Iterator it = data.keySet().iterator();
while (it.hasNext()) {
int key = (Integer) it.next();
timeSeries.add(new Month(key, new Year(2008)), (Double) data .get(key));
}
TimeSeriesCollection tsc = new TimeSeriesCollection(timeSeries);
IntervalXYDataset dataset = tsc;
本示例中用来创建JFreeChart实例的代码如下:
JFreeChart chart = ChartFactory.createXYBarChart(chartTitle, xTitle,
True, yTitle, dataset, PlotOrientation.VERTICAL, False, False, False);
<!-- page -->
14.3 利用JFreeChart生成饼形图
通过JFreeChart插件,即可以生成普通效果的饼形图,也可以生成3D效果的饼形图;如果想生成普通效果的饼形图,需要通过工厂类ChartFactory的createPieChart()方法获得JFreeChart类的实例,如果想生成3D效果的饼形图,需要通过工厂类ChartFactory的createPieChart3D()方法获得JFreeChart类的实例,这两个方法的入口参数是完全相同的,各个入口参数的类型及功能如表14.3所示。
表14.3 绘制饼形图方法的入口参数类型及功能
参 数 序 号 |
入 口 参 数 |
参 数 功 能 |
1 |
String title |
图表标题 |
2 |
PieDataset dataset |
绘图数据集 |
3 |
boolean legend |
用于设定是否显示图例 |
4 |
boolean tooltips |
用于设定是否采用标准生成器 |
5 |
boolean urls |
用于设定是否包生成链接 |
绘制饼形图时,需要通过DefaultPieDataset数据集封装数据,该数据集中的每一个元素是由一组键值对组成的,这与Map集合有些类似,DefaultPieDataset数据集通过setValue()方法添加数据,setValue()方法有两个重载方法,均有两个入口参数,并且每个参数的含义是相同的,第一个入口参数为图例名称,第二个入口参数统计数据,它们的具体定义如下:
public void setValue(Comparable key, Number value) {
this.data.setValue(key, value);
fireDatasetChanged();
}
public void setValue(Comparable key, double value) {
setValue(key, new Double(value));
}
可以通过绘图区对象PiePlot的setForegroundAlpha(float alpha)方法,实现饼图的透明效果,入口参数alpha的取值范围在0.0和1.0之间,当为0.0时,将不显示饼图,当为1.0时,则不存在透明效果,当超出该范围时,将抛出如下异常:
java.lang.IllegalArgumentException: alpha value out of range
示例14-03 编程类图书年销售额百分比饼形图分析
下面来看一个绘制饼形图的例子,该例绘制的饼形图效果如图14.4和图14.5所示。
图14.4 普通效果的饼形图 图14.5 3D效果的饼形图
代码14-03 光盘位置:光盘\mingrisoft\14\sl\03
本示例使用的模拟绘图数据如下:
String[] cutline; // 图例
Double[] data; // 绘图数据
this.cutline = new String[] { "ASP", "JSP", "PHP", "Hibernate", "Spring", "数据库" };
this.data = new Double[cutline.length];
for (int i = 0; i < data.length; i++) {
data[i] = 1 + Math.random() * 100;
}
创建DefaultPieDataset数据集的代码如下:
DefaultPieDataset dataset = new DefaultPieDataset();
for (int i = 0; i < cutline.length; i++) {
dataset.setValue(cutline[i], data[i]);
}
创建绘制3D效果饼形图的JFreeChart实例,代码如下:
JFreeChart chart = ChartFactory.createPieChart3D(chartTitle, // 图表标题
dataset, // 绘图数据集
False, // 设定是否显示图例
False, // 设定是否显示图例名称
False); // 设定是否生成链接
说明:这里绘制的是图14.5所示的3D效果图,如果想绘制图14.4所示的普通效果图,只需将createPieChart3D()方法改为createPieChart()方法。
当需要在图片上显示中文时,建议不要使用反锯齿功能,这样能够保证汉字的清晰度,代码如下:
chart.setAntiAlias(False);
可以自行定义图表标题的字体、样式、大小和颜色等,代码如下:
TextTitle title = chart.getTitle();
title.setFont(new Font("汉真广标", Font.BOLD, 21));
title.setPaint(Color.RED);
下面通过绘图区对象设置饼状图的绘制方向,可以按顺时针方向绘制,也可以按逆时针方向绘制,以及开始绘制第一段圆弧的角度,关键代码如下:
plot.setDirection(Rotation.ANTICLOCKWISE);
plot.setStartAngle(90);
可以设置饼形图的外观效果,例如圆形(True)或椭圆形(False),默认为圆形,建议在绘制3D效果图时将其设为False,关键代码如下;
plot.setCircular(False);
下面让饼形图实现透明效果,代码如下:
plot.setForegroundAlpha(0.8f);
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 光盘位置:光盘\mingrisoft\14\sl\04
下面的代码负责定义折线的绘制风格,并将指定的图例用实线绘制,代码如下:
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); // 设置坐标轴标题旋转角度
14.5 利用JFreeChart生成区域图
通过JFreeChart插件只能生成普通效果的区域图,利用工厂类ChartFactory的createXYAreaChart()方法获得JFreeChart类的实例,在封装用来绘制区域图的数据时,既可以利用CategoryDataset数据集,也可以利用XYDataset数据集。
XYDataset数据集主要用来绘制与日期相关的统计图,这种统计图的横轴通常为日期标度,纵轴为数值标度,JFreeChart提供了格式化坐标轴标度的功能;在格式化横轴的日期标度时,可以通过java.text.SimpleDateFormat类格式化日期的输出格式,SimpleDateFormat类继承于java.text.DateFormat类。例如,通过下面的代码可以将日期和时间进行格式化:
DateFormat dateFormatDA = new SimpleDateFormat("yyyy-MM-dd"); // 年以4位显示
DateFormat dateFormatDB = new SimpleDateFormat("yy-MM-dd")
发表评论
-
EditorPart
2011-04-13 16:26 9841、设置editor标题 @Override publi ... -
RCP控制View 特性配置(如移动、最大化、最小化、关闭等)
2011-03-26 17:34 46931、我们可以添加org.eclipse.ui.perspect ... -
RCP 程序类
2011-03-07 10:21 8821、ApplicationWorkbenchAdvisor ... -
RCP掌握技术
2011-01-13 11:16 967RCP Application Plugin JFac ... -
GMF学习纪要
2010-12-20 15:23 1269创建GEF工程,具体创建步骤可以参考http://www.ib ... -
重命名Action
2010-12-17 10:22 851File selected_file = (File) sel ... -
控制只能开启一个rcp应用程序
2010-11-25 15:22 860private boolean isAreadyRun ... -
开发环境
2010-05-17 16:39 0http://download.eclipse.org/rel ... -
插件国际化
2010-02-09 14:39 1055第三方国际化插件工具 1.sourceforge.net ... -
在透视图显示工作台视图
2010-02-09 09:16 913public class Perspective implem ... -
preWindowOpen 设置样式
2010-01-14 17:08 1397public void preWindowOpen() { ... -
TableViewer, TreeViewer双击编辑
2009-11-05 23:15 3280在TreeViewer或TableViewer中 ... -
RCP 动态 改变 主窗体标题
2009-10-31 09:23 1150在视图或编辑器触发事件中 IWorkbenchWind ... -
Java: applet+jfreechart动态显示方法的执行时间
2009-10-18 23:03 2659public ActionForward execute(Ac ... -
jfreechart1
2009-08-23 22:54 0? 一、JFreeChart的介绍与获取 JFre ... -
eclispe RCP 小技巧(转)
2009-08-05 22:58 2999一、同时关闭所有打开的view 在view中,只有一个clo ... -
Eclipse RCP(转)
2009-08-05 22:56 2412简单地讲, 一个RCP应用就是一个可独立于Eclispe I ... -
初学RCP开发
2009-07-28 09:37 14351、以前用过AWT,对SWT掌握不难! 2、必须掌握3个概念 ... -
PreferencePage自定义运行时空指针异常疑惑
2009-07-27 16:19 1143PreferenceManager mgr = new P ...
相关推荐
**JFreeChart:一个强大的Java图表库** JFreeChart是一个广泛使用的开源Java库,它提供了丰富的图表类型,如折线图、饼图、柱状图和堆栈柱状图等,用于数据可视化。这个库非常适合那些希望在Java应用程序中集成高...
"JFreeChart的介绍及API说明_经云_新浪博客.files"和"JFreechart综合 - Powered by Sablog-X.files"这两个文件夹可能包含图片、样式表或者其他支持上述HTML页面的资源。 学习JFreeChart时,通常会从以下几个方面...
综上所述,结合Applet和JFreeChart实现曲线走势图是一项涉及Web客户端编程、数据可视化和Java图形处理的综合任务。尽管Applet已逐渐被淘汰,但学习这个过程对于理解早期Web技术以及图形库的使用仍然有其价值。
【标题】"MyBatis高级查询+JFreeChart热点"是一个综合的学习项目,它涵盖了数据库操作和数据可视化两个重要领域。MyBatis是Java开发中常用的一个持久层框架,而JFreeChart则是一个用于创建高质量图表的库。下面将...
在本文中,我们将深入探讨如何使用S2SH(Struts2、Spring、Hibernate)框架,结合JFreeChart库和Ajax技术,动态生成统计图表。首先,我们需要理解这些组件的基本概念: **S2SH框架**: S2SH是Web开发中的一个流行...
综合考虑,第三种方式——服务端直接生成图表图片,更适合当前大多数Web项目的实际需求。 #### 三、JFreeChart介绍 JFreeChart是一款开源的Java图表组件,能够生成各种类型的2D或3D图表,包括饼图、柱状图、线图、...
### 解决JFreeChart中文乱码方案整理 #### 背景介绍 在使用JFreeChart绘制图表时,中文字符的显示常常会出现...通过这些综合手段的应用,可以在很大程度上解决JFreeChart中的中文乱码问题,提高图表的可用性和美观性。
通过上述技术的综合运用,这个广告管理系统具备了高效的数据处理能力、友好的用户界面以及丰富的数据分析功能。系统中的十几张表涵盖了广告主、广告位、广告订单、投放效果等多个方面,充分体现了其实战价值。这样的...
6. 雷达图和极坐标图:多维度数据的综合展示,如性能评估或多因素比较。 7. 地图:可用于地理数据的可视化,例如人口分布或选举结果。 此外,JFreeChart还提供了丰富的自定义选项,允许开发者调整颜色、字体、标签...
根据临床科室目前使用的各种体温单样本绘制的一个综合体的体温单。代码中包绘制总体的工具类TwdChartUtil,及自定义的浮点型类型的线条、坐标点的基类,以及绘制过程在需要的一些工具类,使用时可以执行复制到自己的...
组合图表可以将不同的图表类型合并在一起,以提供更加综合的数据视图;叠加图表则是在同一坐标轴上显示多个系列,以比较它们之间的关系。 **2.14 未来发展规划** 这部分概述了JFreeChart未来可能发展的方向,包括...
- **复合图**,将多种图表类型结合在一起,提供综合视角。 - **甘特图**,用于项目管理和任务跟踪。 - **仪表盘图和刻度图**,模拟物理仪表显示数据。 - **温度计图和刻度图**,适用于温度和压力等物理量的直观表示...
### JFreeChart 图表制作技术研究及应用 #### 一、统计及统计图表的重要性 统计是一种重要的数据分析手段,通过对数据的搜集、汇总和计算来揭示事物的状态和发展趋势。统计信息通常具备两大特点:数量性和综合性。...
综上所述,"flex+jfreechart+others"的整合是一项涉及前端交互、后端数据处理、通信协议、图表定制等多个领域的综合性工作,需要开发者具备多方面技能。通过这样的整合,可以打造出既美观又功能强大的数据可视化应用...
这是一个基于Java技术栈的投票系统...总的来说,这个投票系统展示了Java企业级开发中常用的技术组合,包括前端MVC框架、ORM工具、应用管理框架以及数据库管理和图表库的综合运用,为开发者提供了一个完整的参考示例。
- 通过叠加或并列的方式将不同图表整合在一起,便于综合分析。 - **未来发展规划** - 文档概述了 JFreeChart 的未来发展方向,包括新功能的开发计划和技术路线图。 #### 3. 下载和安装 JFreeChart - **下载** - ...
Java图表库JFreeChart是Java开发中用于创建各种复杂图表的开源工具,广泛应用于数据分析、报表生成、可视化应用等场景。这个库支持多种图表类型,包括柱状图、饼图、线形图、散点图、面积图、甘特图以及复杂的组合...
### 综合框架构建(Application Frame) 无论是饼图还是折线图,最终都需要将它们嵌入到一个图形用户界面中。在给定的代码中,使用了`ApplicationFrame`作为主框架,并通过`setContentPane()`方法将包含图表的面板...
综合运用这些组件,开发者可以构建一个功能完善的Web应用,实现用户文件上传下载、邮件发送、报表生成等功能。例如,用户上传的文件可以通过jspSmartUpload组件处理,然后利用JavaMail发送邮件附带文件;同时,可以...
- 组合图表将不同类型的数据结合到一个图表中,便于进行综合分析。 - 可以在同一个图表上叠加不同类型的图表,如折线图和柱状图。 **2.13 未来发展** - JFreeChart团队正在持续开发新的功能和图表类型。 - 用户可以...