- 浏览: 66215 次
- 性别:
- 来自: 广州
文章分类
最新评论
一般的创建图表的过程为:
1. 从数据库里读取数据
2. 将数据保存到图表对应的数据集对象中
3. 创建坐标轴对象
4. 创建Renderer对象
5. 创建Plot对象
6. 创建JfreeChart对象
7. 生成图片文件(或者二进制流)
JFreeChart支持的图表类型总结
一、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):
一些重要的方法:
pieplot.setExplodePercent(0,0.3D) //把Lable 为”One” 的那一块”挖”出来30%
3、输出略
三、柱状图
柱状图的dataset 一般是用CatagoryDataset接口(具体实现类是DefaultCategoryDataset),也会用 IntervalXYDataset
接口
1、创建一个数据源(dataset):
2、由ChartFactory 产生 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):
B、由ChartFactory 产生 JFreeChart 对象
B、由ChartFactory 产生 JFreeChart 对象
一些重要的方法:
XYLineAndShapeRenderer xylineandshaperenderer = new XYLineAndShapeRenderer();
xylineandshaperenderer.setSeriesLinesVisible(0, false); //第一个XYSeries数据点间连线不可见
xylineandshaperenderer.setSeriesShapesVisible(1, false); //第二个XYSeries数据点不可见
xyplot.setRenderer(xylineandshaperenderer);
五、时间序列图
时间序列图和折线图很相似,不同的是它在 domain轴的数据是时间而不是数字。 时间序列图的dataset 是
XYDataset 接口,具体实现类是TimeSeriesCollection ,和上面类似,有TimeSeries 对象,它被添加入
TimeSeriesCollection 。
1、创建一个数据源(dataset):
2、由ChartFactory 产生 JFreeChart 对象
一些重要的方法:
A、增加标记线:
xyplot.addRangeMarker(new ValueMarker(550D)); //数值轴
Quarter quarter = new Quarter(2, 2002);
xyplot.addDomainMarker(new ValueMarker(quarter.getMiddleMillisecond())); //时间轴
B、数据点的调整
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)xyplot.getRenderer();
xylineandshaperenderer.setDefaultShapesVisible(true); //数据点可见
xylineandshaperenderer.setSeriesFillPaint(0, Color.red); //数据点填充为红色
xylineandshaperenderer.setSeriesFillPaint(1, Color.white); //数据点填充为白色
xylineandshaperenderer.setUseFillPaint(true); //应用
C、平均值曲线
这个曲线有什么用呢?很简单的例子,这里有一个以半年每天为单位的数据绘制的曲线,我们想看看以月为单位数据
的变化,这时就可以用到它了。
TimeSeries timeseries = createEURTimeSeries(); //就是以半年每天为单位的数据
TimeSeries timeseries1 = MovingAverage.createMovingAverage(timeseries,
“30 day moving average”,
30, //30天为一个周期
30); //最开始的30天跳过
TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
timeseriescollection.addSeries(timeseries);
timeseriescollection.addSeries(timeseries1);
return timeseriescollection;
六、总结一下
dataset plot renderer
饼图 PieDataset(DefaultPieDataset) PiePlot ——
柱状图 CatagoryDataset(DefaultCategoryDataset) CategoryPlot BarRenderer
折线图 CatagoryDataset(DefaultCategoryDataset) CategoryPlot LineAndShapeRenderer
XYDataset(XYSeriesCollection) XYPlot XYLineAndShapeRenderer
时间序列图 XYDataset (TimeSeriesCollection) XYPlot XYLineAndShapeRenderer
这里只是一些常用的方法,具体还是看API
七、Item Lable
这里以柱状图为例说明,具体来说就是在每个柱状上显示它的数据,具体有下面内容:
A、使 Item Lable 可见
B、调整 Item Lable 的颜色、字体等
C、调整 Item Lable 的位置
D、定制 Item Lable 的内容
1、分配一个 Lable Generator 给 renderer
BarRenderer barrenderer = (BarRenderer)categoryplot.getRenderer();
GategoryLableGenerator generator =new StandardGategoryLableGenerator(
“{2}”, new DecimalFormat(”0.00″) //调整显示的数字和字符格式
);
barrenderer.setLableGenerator(generator);
2、使 Item Lable 可见
barrenderer.setItemLableVisible(true);
3、调整 Item Lable 的颜色、字体等
barrenderer.setItemLablePaint(Color.red);
barrenderer.setItemLableFont(new Font(”SansSerif”,Font.PLAIN,10));
4、调整 Item Lable 的位置
这里涉及到一个新的对象 ItemLablePosition , ItemLablePosition的构造函数有两个或四个参数
public ItemLabelPosition(ItemLabelAnchor itemLabelAnchor,
org.jfree.ui.TextAnchor textAnchor,
org.jfree.ui.TextAnchor rotationAnchor,
double angle)
itemLabelAnchor - Item Lable 的位置 (最重要的!!)
textAnchor - Item Lable里包含的正文相对于Item Lable 的位置
rotationAnchor - Item Lable里包含的正文旋转的位置
angle - 旋转的角度
ItemLabelPosition itemlabelposition = new ItemLabelPosition(ItemLabelAnchor.INSIDE12,
TextAnchor.CENTER_RIGHT,
TextAnchor.CENTER_RIGHT,
-1.57D);
barrenderer.setPositiveItemLabelPosition(itemlabelposition);
这样就可以每个柱状上显示它的数据了,当然可以定制 Item Lable 的内容,比如 Item Lable text 超过100的才
显示,这样就需要定制自己的类,它要实现GategoryLableGenerator 接口,实现generateItemLable()方法
1. 从数据库里读取数据
2. 将数据保存到图表对应的数据集对象中
3. 创建坐标轴对象
4. 创建Renderer对象
5. 创建Plot对象
6. 创建JfreeChart对象
7. 生成图片文件(或者二进制流)
JFreeChart支持的图表类型总结
图表类型 工厂类方法 数据集类型 备注 柱状图 createBarChart CategoryDataset 柱状图3D createBarChart3D CategoryDataset 饼图 createPieChart PieDataset 饼图3D createPieChart3D PieDataset 线图 createLineChart CategoryDataset 线图3D createLineChart3D CategoryDataset 复合饼图 createMultiplePieChart CategoryDataset 需要设置TableOrder 复合饼图3D createMultiplePieChart3D CategoryDataset 环形图 createRingChart PieDataset 瀑布图 createWaterfallChart CategoryDataset 柱图特殊形式 面积图 createAreaChart CategoryDataset 散点图 createScatterPlot XYSeriesCollection 组织图 createHistogram XYSeriesCollection 数据点阶梯图 createXYStepChart XYSeriesCollection 堆积面积图 createStackedAreaChart CategoryDataset 堆积柱状图 createStackedBarChart CategoryDataset 堆积柱状图3D createStackedBarChart3D CategoryDataset 数据点线图 createXYLineChart XYSeriesCollection 数据点面积图 createXYAreaChart XYSeriesCollection 数据点阶梯面积图 createXYStepAreaChart XYSeriesCollection 堆积数据点面积图 createStackedXYAreaChart TableXYDataset 时序图 createTimeSeriesChart XYDataset 晶片图 createWaferMapChart WaferMapDataset WindPlot createWindPlot WindDataset 极线图 createPolarChart XYDataset 气泡图 createBubbleChart XYZDataset BoxAndWhiskerChart createBoxAndWhiskerChart BoxAndWhiskerXYDataset 烛台图 createCandlestickChart OHLCDataset 股价图 createHighLowChart OHLCDataset 2种 时间线差别 甘特图 createGanttChart IntervalCategoryDataset 数据点柱状图 createXYBarChart IntervalXYDataset
一、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.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); //纵坐标网格线白色 //下面两行使纵坐标的最小单位格为整数 NumberAxis numberaxis = (NumberAxis)categoryplot.getRangeAxis(); numberaxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits()); BarRenderer barrenderer = (BarRenderer)categoryplot.getRenderer(); //获得renderer 注意这里是下嗍造型 到BarRenderer!! 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);
五、时间序列图
时间序列图和折线图很相似,不同的是它在 domain轴的数据是时间而不是数字。 时间序列图的dataset 是
XYDataset 接口,具体实现类是TimeSeriesCollection ,和上面类似,有TimeSeries 对象,它被添加入
TimeSeriesCollection 。
1、创建一个数据源(dataset):
private static XYDataset createDataset() { TimeSeries timeseries = new TimeSeries(”L&G European Index Trust”,Month.class); timeseries.add(new Month(2, 2001), 181.8D);//这里用的是Month.class,同样还有Day.class Year.class 等等 timeseries.add(new Month(3, 2001), 167.3D); timeseries.add(new Month(4, 2001), 153.8D); timeseries.add(new Month(5, 2001), 167.6D); timeseries.add(new Month(6, 2001), 158.8D); timeseries.add(new Month(7, 2001), 148.3D); timeseries.add(new Month(8, 2001), 153.9D); timeseries.add(new Month(9, 2001), 142.7D); timeseries.add(new Month(10, 2001), 123.2D); timeseries.add(new Month(11, 2001), 131.8D); timeseries.add(new Month(12, 2001), 139.6D); timeseries.add(new Month(1, 2002), 142.9D); timeseries.add(new Month(2, 2002), 138.7D); timeseries.add(new Month(3, 2002), 137.3D); timeseries.add(new Month(4, 2002), 143.9D); timeseries.add(new Month(5, 2002), 139.8D); timeseries.add(new Month(6, 2002), 137D); timeseries.add(new Month(7, 2002), 132.8D); TimeSeries timeseries1 = new TimeSeries(”L&G UK Index Trust”,Month.class); timeseries1.add(new Month(2, 2001), 129.6D); timeseries1.add(new Month(3, 2001), 123.2D); timeseries1.add(new Month(4, 2001), 117.2D); timeseries1.add(new Month(5, 2001), 124.1D); timeseries1.add(new Month(6, 2001), 122.6D); timeseries1.add(new Month(7, 2001), 119.2D); timeseries1.add(new Month(8, 2001), 116.5D); timeseries1.add(new Month(9, 2001), 112.7D); timeseries1.add(new Month(10, 2001), 101.5D); timeseries1.add(new Month(11, 2001), 106.1D); timeseries1.add(new Month(12, 2001), 110.3D); timeseries1.add(new Month(1, 2002), 111.7D); timeseries1.add(new Month(2, 2002), 111D); timeseries1.add(new Month(3, 2002), 109.6D); timeseries1.add(new Month(4, 2002), 113.2D); timeseries1.add(new Month(5, 2002), 111.6D); timeseries1.add(new Month(6, 2002), 108.8D); timeseries1.add(new Month(7, 2002), 101.6D); TimeSeriesCollection timeseriescollection = new TimeSeriesCollection(); timeseriescollection.addSeries(timeseries); timeseriescollection.addSeries(timeseries1); timeseriescollection.setDomainIsPointsInTime(true); //domain轴上的刻度点代表的是时间点而不是时间段 return timeseriescollection; }
2、由ChartFactory 产生 JFreeChart 对象
private static JFreeChart createChart(XYDataset xydataset) { JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(”Legal & General Unit Trust Prices”, “Date”, “Price Per Unit”, xydataset, true, true, false); jfreechart.setBackgroundPaint(Color.white); XYPlot xyplot = (XYPlot)jfreechart.getPlot(); //获得 plot : XYPlot!! xyplot.setBackgroundPaint(Color.lightGray); xyplot.setDomainGridlinePaint(Color.white); xyplot.setRangeGridlinePaint(Color.white); xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D)); xyplot.setDomainCrosshairVisible(true); xyplot.setRangeCrosshairVisible(true); org.jfree.chart.renderer.xy.XYItemRenderer xyitemrenderer = xyplot.getRenderer(); if(xyitemrenderer instanceof XYLineAndShapeRenderer) { XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)xyitemrenderer; xylineandshaperenderer.setDefaultShapesVisible(true); //数据点可见 xylineandshaperenderer.setDefaultShapesFilled(true); //数据点是实心点 } DateAxis dateaxis = (DateAxis)xyplot.getDomainAxis(); //对domain 轴上日期显示格式定义 dateaxis.setDateFormatOverride(new SimpleDateFormat(”MMM-yyyy”)); return jfreechart; }
一些重要的方法:
A、增加标记线:
xyplot.addRangeMarker(new ValueMarker(550D)); //数值轴
Quarter quarter = new Quarter(2, 2002);
xyplot.addDomainMarker(new ValueMarker(quarter.getMiddleMillisecond())); //时间轴
B、数据点的调整
XYLineAndShapeRenderer xylineandshaperenderer = (XYLineAndShapeRenderer)xyplot.getRenderer();
xylineandshaperenderer.setDefaultShapesVisible(true); //数据点可见
xylineandshaperenderer.setSeriesFillPaint(0, Color.red); //数据点填充为红色
xylineandshaperenderer.setSeriesFillPaint(1, Color.white); //数据点填充为白色
xylineandshaperenderer.setUseFillPaint(true); //应用
C、平均值曲线
这个曲线有什么用呢?很简单的例子,这里有一个以半年每天为单位的数据绘制的曲线,我们想看看以月为单位数据
的变化,这时就可以用到它了。
TimeSeries timeseries = createEURTimeSeries(); //就是以半年每天为单位的数据
TimeSeries timeseries1 = MovingAverage.createMovingAverage(timeseries,
“30 day moving average”,
30, //30天为一个周期
30); //最开始的30天跳过
TimeSeriesCollection timeseriescollection = new TimeSeriesCollection();
timeseriescollection.addSeries(timeseries);
timeseriescollection.addSeries(timeseries1);
return timeseriescollection;
六、总结一下
dataset plot renderer
饼图 PieDataset(DefaultPieDataset) PiePlot ——
柱状图 CatagoryDataset(DefaultCategoryDataset) CategoryPlot BarRenderer
折线图 CatagoryDataset(DefaultCategoryDataset) CategoryPlot LineAndShapeRenderer
XYDataset(XYSeriesCollection) XYPlot XYLineAndShapeRenderer
时间序列图 XYDataset (TimeSeriesCollection) XYPlot XYLineAndShapeRenderer
这里只是一些常用的方法,具体还是看API
七、Item Lable
这里以柱状图为例说明,具体来说就是在每个柱状上显示它的数据,具体有下面内容:
A、使 Item Lable 可见
B、调整 Item Lable 的颜色、字体等
C、调整 Item Lable 的位置
D、定制 Item Lable 的内容
1、分配一个 Lable Generator 给 renderer
BarRenderer barrenderer = (BarRenderer)categoryplot.getRenderer();
GategoryLableGenerator generator =new StandardGategoryLableGenerator(
“{2}”, new DecimalFormat(”0.00″) //调整显示的数字和字符格式
);
barrenderer.setLableGenerator(generator);
2、使 Item Lable 可见
barrenderer.setItemLableVisible(true);
3、调整 Item Lable 的颜色、字体等
barrenderer.setItemLablePaint(Color.red);
barrenderer.setItemLableFont(new Font(”SansSerif”,Font.PLAIN,10));
4、调整 Item Lable 的位置
这里涉及到一个新的对象 ItemLablePosition , ItemLablePosition的构造函数有两个或四个参数
public ItemLabelPosition(ItemLabelAnchor itemLabelAnchor,
org.jfree.ui.TextAnchor textAnchor,
org.jfree.ui.TextAnchor rotationAnchor,
double angle)
itemLabelAnchor - Item Lable 的位置 (最重要的!!)
textAnchor - Item Lable里包含的正文相对于Item Lable 的位置
rotationAnchor - Item Lable里包含的正文旋转的位置
angle - 旋转的角度
ItemLabelPosition itemlabelposition = new ItemLabelPosition(ItemLabelAnchor.INSIDE12,
TextAnchor.CENTER_RIGHT,
TextAnchor.CENTER_RIGHT,
-1.57D);
barrenderer.setPositiveItemLabelPosition(itemlabelposition);
这样就可以每个柱状上显示它的数据了,当然可以定制 Item Lable 的内容,比如 Item Lable text 超过100的才
显示,这样就需要定制自己的类,它要实现GategoryLableGenerator 接口,实现generateItemLable()方法
发表评论
-
(转载)WebLogic10部署STRUTS2使用convention插件的问题
2013-12-31 15:08 976以前遇到过类似问题,后来通过其它方式解决了,解压jar包到cl ... -
ApacheFtpServer 集成java项目开发
2013-11-09 22:27 1803Apache FtpServer 是一个100%纯Java的F ... -
实战 Lucene 4.2, 初识 Lucene(内容转载,代码进行了少量更改)
2013-03-20 12:01 3170Lucene 简介 Lucene 是一个 ... -
js控制iframe滚动条移动
2012-09-18 11:54 8617.floatWin1{ width:154px; posi ... -
HttpSessionListener用法 监听会话使用数量
2011-07-26 23:57 1819HttpSessionListener接口是一个可监听java ... -
图片轮播js代码
2010-06-30 15:35 6662图片轮播js代码,简洁明了!可代替flash轮播功能! < ... -
document.getElementsByTagName("BODY")[0].innerHTML获取失败
2010-06-30 15:29 8146最近开发的时候用到html在线编辑器!发现一个问题,保存内容的 ...
相关推荐
使用JFreeChart创建图表.ppt
本文档主要讲述的是使用 JFreeChart来创建基于web的图表;JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、...
JFreeChart 图表制作工具 3D图表制作工具 3D饼制作工具
使用 JFreeChart来创建基于web的图表
JFreeChart 混合图表 Example for mutiple jfreechart plot. Demonstration for the chart!
JFreeChart 典型图表生成及属性设置示例
JFreeChart图表制作技术研究及应用.pdf..............
jfreechart 图表制作组件,柱状图,完整的程序,有数字,有透明度
jfreechart生成各种图表 柱状 饼状 折线 锥状
深入探究JFreeChart(图表报表实用教材) 深入探究JFreeChart(图表报表实用教材) 深入探究JFreeChart(图表报表实用教材)
Jfreechart生成图表的一个例子,能生成柱状图、饼状图、线状图,代码有详细的注释,很适合初学者学习。
使用JfreeChart创建柱状图,折线图,饼图,堆积柱状图,时间序列图,二维Y轴坐标图.自己把自己整理的所有笔记和代码全都分享出来,希望大家在做图表的时候,不至于因为JfreeChart丑就不采用。
android类似于Jfreechart的图表
用JFreeChart创建基于Web的图表.pdf
JFreeChart是JAVA平台上的一个开放的图表绘制类库。它完全使用JAVA语言编写,是为applications, applets, servlets 以及JSP等使用所设计。JFreeChart可生成饼图(pie charts)、柱状图(bar charts)、 散点图...
使用JFreeChart制作各种统计图表,包含条形统计图,线性统计图,饼图,柱状图等
通过freemarker,实现word模板中占位符的赋值以及赋值后的word文档生成。通过jfreechart生成柱状图和饼图,并在word文档中显示。
使用JFreeChart来创建基于web的图表
在 JavaFx 中使用 JFreeChart 生成图表的方法
JFreeChart水晶报表制作 JFreeChart水晶报表制作