`
chenruieye
  • 浏览: 38066 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

JFreeChart 全面讲解<->

 
阅读更多

一、JFreeChart获取。
 

        JFreeChart是JFreeChart公司在开源网站SourceForge.net上的一个项目,该公司的主要产品有如下:
         1、JFreeReport:报表解决工具
         2、JFreeChart:Java图形解决方案(Application/Applet/Servlet/Jsp)
         3、JCommon:JFreeReport和JFreeChart的公共类库
         4、JFreeDesigner:JFreeReport的报表设计工具

     我们可以从jfree官方网站上获取最新版本和相关资料(但是jfree的document需要40美金才能获取),
     获取地址:http://www.jfree.org/jfreechart/index.html (同时可以获得简明介绍)
     我们以当前最新版本:jfreechart_0.9.21.zip为例子进行说明。

二、JFreeChart配置安装
     1、解压jfreechart_0.9.21.zip到指定位置,其中source是jfreechart的源码,jfreechart-0.9.21-demo.jar
        是例子程序(该部分留给大家自己去研究)
     2、为了配置成功,我们需要关注的文件有如下三个:jfreechart-0.9.21.jar、lib\jcommon-0.9.6.jar、
        lib\gnujaxp.jar
     3、如果是Application开发,把上述三个文件拷贝到%JAVA_HOME%\LIB中,同时在环境变量CLASSPATH中加入
        如果是WEB开发,以TOMCAT中的一个WEB项目TEST为例子说明:
        把上述三个文件拷贝到TEST\WEB-INF\LIB中,然后修改TEST\WEB-INF\web.xml文件,在其中加入如下代码:
                
                    DisplayChart
                    org.jfree.chart.servlet.DisplayChart
                
                
                    DisplayChart
                    /servlet/DisplayChart
                
                至此jfreechart的配置就完成了,下面就可以进行jfreechart的开发了。这里值得提出的是jfreechart的类
        结构设计前后兼容性不是很好,不同版本的jfreechart中类库结构可能不一样,有时候可能需要查源码。如果
        是中文显示的时候可能依据观感需要改变源码的字体,不过我个人觉得这个版本比以前版本要好一些。

三、JFreeChart功能介绍
     JFreeChart目前是最好的java图形解决方案,基本能够解决目前的图形方面的需求,主要包括如下几个方面:
     pie charts (2D and 3D):饼图(平面和立体)
     bar charts (regular and stacked, with an optional 3D effect):柱状图
     line and area charts:曲线图
     scatter plots and bubble charts
     time series, high/low/open/close charts and candle stick charts:时序图
     combination charts:复合图
     Pareto charts
     Gantt charts:甘特图
     wind plots, meter charts and symbol charts
     wafer map charts
     (态图表,饼图(二维和三维) , 柱状图 (水平,垂直),线图,点图,时间变化图,甘特图, 股票行情图,混和图, 温度计图, 刻度图等常用商用图表)
     图形可以导出成PNG和JPEG格式,同时还可以与PDF和EXCEL关联
    
     JFreeChart核心类库介绍:
             研究jfreechart源码发现源码的主要由两个大的包组成:org.jfree.chart,org.jfree.data。其中前者主要与图形
     本身有关,后者与图形显示的数据有关。具体研究如果大家有兴趣的话可以自己研究,以后有时间我会告诉大家怎么去
     研究源码。
          核心类主要有:
            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:用于生成图象的帮助提示,不同类型图表对应不同类型的工具提示类

四、jFreeChart产生图形的流程
创建一个数据源(dataset)来包含将要在图形中显示的数据
创建一个 JFreeChart 对象来代表要显示的图形
把图形输出
重要的类和接口:
org.jfree.data.general.Dataset 所有数据源类都要实现的接口
org.jfree.chart.ChartFactory 由它来产生 JFreeChart 对象
org.jfree.chart.JFreeChart 所有对图形的调整都是通过它噢!!
org.jfree.chart.plot.Plot 通过JFreeChart 对象获得它,然后再通过它对图形外部部分(例:坐标轴)调整
注意:它有很多子类,一般都下嗍造型到它的子类!
org.jfree.chart.renderer.AbstractRenderer 通过JFreeChart 对象获得它,然后再通过它对图形内部部分
(例:折线的类型)调整。同样,针对不同类型的报表图,它有
着不同的子类实现!在下面我们简称它为 Renderer
下面我们结合不同类型的图形来具体分析这个流程。

五、饼图
饼图的dataset 一般是用PieDataset 接口,具体实现类是 DefaultPieDataset
1、创建一个数据源(dataset):
private static PieDataset createDataset()
{
DefaultPieDataset defaultpiedataset = new DefaultPieDataset(); //注意是DefaultPieDataset!!
defaultpiedataset.setValue(”One”, new Double(43.200000000000003D));
defaultpiedataset.setValue(”Two”, new Double(10D));
defaultpiedataset.setValue(”Three”, new Double(27.5D));
defaultpiedataset.setValue(”Four”, new Double(17.5D));
return defaultpiedataset;
}
2、由ChartFactory 产生 JFreeChart 对象
private static JFreeChart createChart(PieDataset piedataset)
{
JFreeChart jfreechart = ChartFactory.createPieChart(”Pie Chart Demo 1″, //图形标题名称
piedataset, // dataset
true, // legend?
true, // tooltips?
false); //URLs?
PiePlot pieplot = (PiePlot)jfreechart.getPlot(); //通过JFreeChart 对象获得 plot:PiePlot!!
pieplot.setNoDataMessage(”No data available”); // 没有数据的时候显示的内容
return jfreechart;
}
一些重要的方法:
pieplot.setExplodePercent(0,0.3D) //把Lable 为”One” 的那一块”挖”出来30%
3、输出略

六、柱状图
柱状图的dataset 一般是用CatagoryDataset接口(具体实现类是DefaultCategoryDataset),也会用 IntervalXYDataset
接口
1、创建一个数据源(dataset):
private static CategoryDataset createDataset()
{
String series1 = “First”;
String series2 = “Second”;
String series3 = “Third”;
String category1 = “Category 1″;
String category2 = “Category 2″;
String category3 = “Category 3″;
String category4 = “Category 4″;
String category5 = “Category 5″;
DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
defaultcategorydataset.addValue(1.0D, series1, category1);
defaultcategorydataset.addValue(4D, series1, category2);
defaultcategorydataset.addValue(3D, series1, category3);
defaultcategorydataset.addValue(5D, series1, category4);
defaultcategorydataset.addValue(5D, series1, category5);

defaultcategorydataset.addValue(5D, series2, category1);
defaultcategorydataset.addValue(7D, series2, category2);
defaultcategorydataset.addValue(6D, series2, category3);
defaultcategorydataset.addValue(8D, series2, category4);
defaultcategorydataset.addValue(4D, series2, category5);

defaultcategorydataset.addValue(4D, series3, category1);
defaultcategorydataset.addValue(3D, series3, category2);
defaultcategorydataset.addValue(2D, series3, category3);
defaultcategorydataset.addValue(3D, series3, category4);
defaultcategorydataset.addValue(6D, series3, category5);
return defaultcategorydataset;
}
2、由ChartFactory 产生 JFreeChart 对象
private static JFreeChart createChart(CategoryDataset categorydataset)
{
JFreeChart jfreechart = ChartFactory.createBarChart(
"Bar Chart Demo", //图形标题名称
"Category",//domain 轴 Lable这里先简单理解为横坐标Lable好了
"Value", //range 轴 Lable这里也先简单理解为纵坐标Lable好了
categorydataset, // dataset
PlotOrientation.VERTICAL, //垂直显示
true, // legend?
true, // tooltips?
false);
//URLs?
jfreechart.setBackgroundPaint(Color.white); //设定背景色为白色
CategoryPlot categoryplot = jfreechart.getCategoryPlot(); //获得 plot:CategoryPlot!!
categoryplot.setBackgroundPaint(Color.lightGray); //设定图表数据显示部分背景色
categoryplot.setDomainGridlinePaint(Color.white); //横坐标网格线白色
categoryplot.setDomainGridlinesVisible(true); //可见
categoryplot.setRangeGridlinePaint(Color.white); //纵坐标网格线白色
//设置series1与category的显示位置;类似效果图http://www.chinabs.net/webimages/PieChart7.png
categoryplot.setDomainAxisLocation(AxisLocation.TOP_OR_RIGHT);
categoryplot.setRangeAxisLocation(AxisLocation.BOTTOM_OR_RIGHT);

//使纵坐标的最小单位格为整数
NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();
numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());

BarRenderer barrenderer = (BarRenderer)categoryplot.getRenderer(); //获得renderer 注意这里是下嗍造型到BarRenderer!!
//显示每个柱的数值,并修改该数值的字体属性;类似效果图http://www.chinabs.net/webimages/PieChart6.png
barrenderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
barrenderer.setItemLabelFont(new Font("黑体",Font.PLAIN,12));
barrenderer.setItemLabelsVisible(true);

barrenderer.setDrawBarOutline(false); // Bar的外轮廓线不画
GradientPaint gradientpaint = new GradientPaint(0.0F, 0.0F, Color.blue,0.0F, 0.0F, new Color(0, 0, 64)); //设定特定颜色
GradientPaint gradientpaint1 = new GradientPaint(0.0F, 0.0F, Color.green,0.0F, 0.0F, new Color(0, 64, 0));
GradientPaint gradientpaint2 = new GradientPaint(0.0F, 0.0F, Color.red,0.0F, 0.0F, new Color(64, 0, 0));
barrenderer.setSeriesPaint(0, gradientpaint); //给series1 Bar设定上面定义的颜色
barrenderer.setSeriesPaint(1, gradientpaint1); //给series2 Bar 设定上面定义的颜色
barrenderer.setSeriesPaint(2, gradientpaint2); //给series3 Bar 设定上面定义的颜色
CategoryAxis categoryaxis = categoryplot.getDomainAxis(); //横轴上的 Lable 45度倾斜
categoryaxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
return jfreechart;
}
一些重要的方法:(增加一块标记)
IntervalMarker intervalmarker = new IntervalMarker(4.5D, 7.5D);
intervalmarker.setLabel("Target Range");
intervalmarker.setLabelFont(new Font(”SansSerif”, 2, 11));
intervalmarker.setLabelAnchor(RectangleAnchor.LEFT);
intervalmarker.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
intervalmarker.setPaint(new Color(222, 222, 255, 128));
categoryplot.addRangeMarker(intervalmarker, Layer.BACKGROUND);

七、折线图
折线图的dataset 两种CatagoryDataset接口(具体实现类是DefaultCategoryDataset),XYDataset 接口
1、CatagoryDataset接口:
A、创建一个数据源(dataset):
private static CategoryDataset createDataset()
{
String series1 = “First”;
String series2 = “Second”;
String series3 = “Third”;
String type1 = “Type 1″;
String type2 = “Type 2″;
String type3 = “Type 3″;
String type4 = “Type 4″;
String type5 = “Type 5″;
String type6 = “Type 6″;
String type7 = “Type 7″;
String type8 = “Type 8″;
DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
defaultcategorydataset.addValue(1.0D, series1, type1);
defaultcategorydataset.addValue(4D, series1, type2);
defaultcategorydataset.addValue(3D, series1, type3);
defaultcategorydataset.addValue(5D, series1, type4);
defaultcategorydataset.addValue(5D, series1, type5);
defaultcategorydataset.addValue(7D, series1, type6);
defaultcategorydataset.addValue(7D, series1, type7);
defaultcategorydataset.addValue(8D, series1, type8);

defaultcategorydataset.addValue(5D, series2, type1);
defaultcategorydataset.addValue(7D, series2, type2);
defaultcategorydataset.addValue(6D, series2, type3);
defaultcategorydataset.addValue(8D, series2, type4);
defaultcategorydataset.addValue(4D, series2, type5);
defaultcategorydataset.addValue(4D, series2, type6);
defaultcategorydataset.addValue(2D, series2, type7);
defaultcategorydataset.addValue(1.0D, series2, type8);

defaultcategorydataset.addValue(4D, series3, type1);
defaultcategorydataset.addValue(3D, series3, type2);
defaultcategorydataset.addValue(2D, series3, type3);
defaultcategorydataset.addValue(3D, series3, type4);
defaultcategorydataset.addValue(6D, series3, type5);
defaultcategorydataset.addValue(3D, series3, type6);
defaultcategorydataset.addValue(4D, series3, type7);
defaultcategorydataset.addValue(3D, series3, type8);
return defaultcategorydataset;
}
B、由ChartFactory 产生 JFreeChart 对象 (与上面重复的部分就不再注释)
private static JFreeChart createChart(CategoryDataset categorydataset)
{
JFreeChart jfreechart = ChartFactory.createLineChart(”Line Chart Demo 1″,
“Type”,
“Value”,
categorydataset,
PlotOrientation.VERTICAL,
true,
true,
false);
jfreechart.setBackgroundPaint(Color.white);
CategoryPlot categoryplot = (CategoryPlot)jfreechart.getPlot();
categoryplot.setBackgroundPaint(Color.lightGray);
categoryplot.setRangeGridlinePaint(Color.white);
NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis();
numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
numberaxis.setAutoRangeIncludesZero(true);
//获得renderer 注意这里是下嗍造型到lineandshaperenderer!!
LineAndShapeRenderer lineandshaperenderer = (LineAndShapeRenderer)categoryplot.getRenderer();
lineandshaperenderer.setShapesVisible(true); //series 点(即数据点)可见
lineandshaperenderer.setSeriesStroke(0, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {
10F, 6F
}, 0.0F)); //定义series为”First”的(即series1)点之间的连线 ,这里是虚线,默认是直线
lineandshaperenderer.setSeriesStroke(1, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {
6F, 6F
}, 0.0F)); //定义series为”Second”的(即series2)点之间的连线
lineandshaperenderer.setSeriesStroke(2, new BasicStroke(2.0F, 1, 1, 1.0F, new float[] {
2.0F, 6F
}, 0.0F)); //定义series为”Third”的(即series3)点之间的连线
return jfreechart;
}
一些重要的方法:
lineandshaperenderer.setLineVisible(true) //series 点(即数据点)间有连线可见
2、XYDataset 接口:
A、创建一个数据源(dataset):
private static XYDataset createDataset()
{
XYSeries xyseries = new XYSeries(”First”); //先产生XYSeries 对象
xyseries.add(1.0D, 1.0D);
xyseries.add(2D, 4D);
xyseries.add(3D, 3D);
xyseries.add(4D, 5D);
xyseries.add(5D, 5D);
xyseries.add(6D, 7D);
xyseries.add(7D, 7D);
xyseries.add(8D, 8D);

XYSeries xyseries1 = new XYSeries(”Second”);
xyseries1.add(1.0D, 5D);
xyseries1.add(2D, 7D);
xyseries1.add(3D, 6D);
xyseries1.add(4D, 8D);
xyseries1.add(5D, 4D);
xyseries1.add(6D, 4D);
xyseries1.add(7D, 2D);
xyseries1.add(8D, 1.0D);

XYSeries xyseries2 = new XYSeries(”Third”);
xyseries2.add(3D, 4D);
xyseries2.add(4D, 3D);
xyseries2.add(5D, 2D);
xyseries2.add(6D, 3D);
xyseries2.add(7D, 6D);
xyseries2.add(8D, 3D);
xyseries2.add(9D, 4D);
xyseries2.add(10D, 3D);

XYSeriesCollection xyseriescollection = new XYSeriesCollection(); //再用XYSeriesCollection添加入XYSeries 对象
xyseriescollection.addSeries(xyseries);
xyseriescollection.addSeries(xyseries1);
xyseriescollection.addSeries(xyseries2);
return xyseriescollection;
}
B、由ChartFactory 产生 JFreeChart 对象
private static JFreeChart createChart(XYDataset xydataset)
{
JFreeChart jfreechart = ChartFactory.createXYLineChart(”Line Chart Demo 2″,
“X”,
“Y”,
xydataset,
PlotOrientation.VERTICAL,
true,
true,
false);
jfreechart.setBackgroundPaint(Color.white);
XYPlot xyplot = (XYPlot)jfreechart.getPlot(); //获得 plot:XYPlot!!
xyplot.setBackgroundPaint(Color.lightGray); //设定图表数据显示部分背景色
xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D)); //设定坐标轴与图表数据显示部分距离
xyplot.setDomainGridlinePaint(Color.white); //网格线颜色
xyplot.setRangeGridlinePaint(Color.white);
//获得 renderer 注意这里是XYLineAndShapeRenderer !!
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)xyplot.getRenderer();
xylineandshaperenderer.setShapesVisible(true); //数据点可见
xylineandshaperenderer.setShapesFilled(true); //数据点被填充即不是空心点
NumberAxis numberaxis = (NumberAxis)xyplot.getRangeAxis();
numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
return jfreechart;
}
一些重要的方法:
XYLineAndShapeRenderer xylineandshaperenderer = new XYLineAndShapeRenderer();
xylineandshaperenderer.setSeriesLinesVisible(0, false); //第一个XYSeries数据点间连线不可见
xylineandshaperenderer.setSeriesShapesVisible(1, false); //第二个XYSeries数据点不可见
xyplot.setRenderer(xylineandshaperenderer);

分享到:
评论

相关推荐

    使用JFreeChart来创建基于web的图表

    &lt;artifactId&gt;jfreechart&lt;/artifactId&gt; &lt;version&gt;1.5.3&lt;/version&gt; &lt;/dependency&gt; ``` 对于其他构建工具或IDE,也可以直接下载jar包并将其添加到类路径中。 #### 创建图表 JFreeChart的核心是`ChartFactory`类,...

    jfreechart-0.9.1-US-v1 说明文档

    - **2.9 组合图表** - 可以将不同的图表类型结合在一个视图中,以提供更全面的数据视图。 #### 四、下载与安装指南 - **下载** - 用户可以从官方站点或其他可靠的资源下载JFreeChart库的最新版本。 - **解压文件**...

    jfreechart-1.0.13-developer-guide(包含src)

    在"jfreechart-1.0.13-developer-guide.pdf"中,你将找到关于JFreeChart库的全面介绍,包括如何创建、定制和展示图表的详细步骤。这份文档通常会涵盖以下关键知识点: 1. **安装与集成**:讲解如何将JFreeChart库...

    jfreechart讲解

    JFreeChart作为一款功能全面的图表绘制工具,为Java开发者提供了强大而灵活的选择。通过本文的介绍,相信读者已经掌握了如何安装和使用JFreeChart的基础知识,并能够根据实际需求选择合适的图表类型进行绘制。在未来...

    《精通Java Web动态图表编程》附JFreeChart -- web图表生成源码

    这一章会深入讲解JFreeChart库,介绍它的历史、特性以及如何在项目中引入和配置。JFreeChart支持多种图表类型,如柱状图、饼图、线图、散点图等,适合用于数据可视化。 3. **第三章:静态图表生成** 学习如何使用...

    JFreeChart 开发指南

    以上知识点总结了《JFreeChart 开发指南》的主要内容,为开发者提供了从入门到进阶所需的全面指导。无论是初学者还是有经验的开发人员,都可以通过这些知识点快速上手,并深入了解JFreeChart的各种特性和高级用法。

    JFreeChartDeveloperGuide_Version_0.9.21官方文档

    - 该文档旨在为开发者提供全面的指南,帮助他们了解如何使用JFreeChart来创建和自定义图表。 - **受众**: 主要面向希望使用JFreeChart创建图表的开发人员。 - **内容**: 包括了从下载安装、基础图表绘制到高级...

    JFreeChart1.0.13 develop guide + demo

    总的来说,JFreeChart 1.0.13 开发指南和示例为开发者提供了全面的参考资料,无论你是初次接触 JFreeChart 还是有经验的使用者,都能从中获得宝贵的知识和实践指导。通过深入学习和实践,你可以轻松地在你的 Java ...

    JFreeChart1.0.6资源包

    这个1.0.6版本的资源包提供了全面的文档和支持,使得开发者可以有效地利用 JFreeChart 来实现各种复杂的图表需求。 **主要功能** 1. **图表类型丰富**:JFreeChart 支持多种图表类型,包括饼图(Pie Chart)、柱状...

    jfreechart制图源码包

    这个源码包专注于讲解如何利用 JFreeChart 在 Web 环境下进行图表制作,涵盖了多种常见的图表类型,为开发者提供了详细的实例和代码,帮助理解和应用 JFreeChart。 1. **下载与配置 JFreeChart** 首先,你需要从...

    JFreeChart教程 __ + __API

    `jfreechart教程.doc`文件提供了关于JFreeChart的详细教程,涵盖了从基本使用到高级特性的全面讲解。通过学习这个教程,开发者能够掌握如何利用JFreeChart创建复杂的图表,并进行个性化定制。 总之,JFreeChart是...

    jfreechart book

    总的来说,《JFreeChart 开发指南》是一本全面的参考书籍,无论是对初学者还是有经验的开发者,都能从中获取关于JFreeChart库的宝贵知识。通过阅读和实践,你可以掌握创建高质量、交互式图表的技能,从而提升你的...

    jfreechart Developer Guide

    ### jfreechart 开发者指南知识点汇总 #### 一、简介 **jfreechart开发者指南**是一本关于Java图表库...通过以上知识点的梳理,读者可以全面了解jfreechart的核心功能和使用方法,从而更好地将其应用于实际项目中。

    jfreechart实例代码详细注释

    以下是对JFreeChart及其相关知识点的详细讲解: 1. **JFreeChart简介**:JFreeChart是一个开源项目,它为Java开发者提供了一套完整的API,用于在应用程序、Web应用或Java Applet中生成高质量的2D图表。它的设计目标...

    jfreechart 开发指南

    总而言之,《JFreeChart 开发指南》全面覆盖了JFreeChart库的各个方面,无论你是初学者还是有经验的开发者,都能从中获益。通过学习和实践书中的内容,你将能够有效地利用JFreeChart为你的项目带来直观且专业的数据...

    JFreeChart学习资料

    本学习资料旨在帮助你全面掌握JFreeChart的使用。 首先,JFreeChart的API是其核心组成部分,它提供了大量的类和接口,如`ChartFactory`用于创建常见类型的图表,`CategoryDataset`和`TimeSeriesCollection`用于存储...

    Hibernate项目开发宝典 源码

    在讲解方式上,使用基础知识与具体实例相结合的方式对Hibernate进行了全面、深入、细致的讲解,使读者在学习的过程中可以通过具体的练习来加深对讲解内容的理解和把握。 本书在讲解Hibernate的同时,还介绍了经常与...

    JAVA零基础数据可视化教学研究.zip

    这份教程可能包含了从基础知识到实践案例的全面讲解。 数据可视化的核心是将数据转化为图形或图像,如柱状图、饼图、折线图等,以便人们能快速理解和分析。在Java中,我们可以借助一些库来实现这一目标,如...

Global site tag (gtag.js) - Google Analytics