JFreeChartD

来源:互联网 发布:软件版本质量考核指标 编辑:程序博客网 时间:2024/06/16 00:59

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
饼图 PieDatasetDefaultPieDataset PiePlot ——
柱状图 CatagoryDatasetDefaultCategoryDataset CategoryPlot BarRenderer
折线图 CatagoryDatasetDefaultCategoryDataset 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()方法

 

其他说明:
//
设置Legend的位置
        //((JFreeChart) chart).getLegend().setPosition(RectangleEdge.RIGHT);
//
设置最高的一个 Item 与图片顶端的距离
        plot.getRangeAxis().setUpperMargin(0.15);
        //
设置最低的一个 Item 与图片底端的距离
        plot.getRangeAxis().setLowerMargin(0.15);
        //
坐标轴字体
        plot.getDomainAxis().setLabelFont(new Font("
宋体", Font.PLAIN, 12));
        //
横轴每个分类的字体
        plot.getDomainAxis().setTickLabelFont(new Font("
宋体", Font.BOLD, 12));
        if(labelPositionsUP_45)
            plot.getDomainAxis().setCategoryLabelPositions(CategoryLabelPositions.UP_45);

//柱图列宽度((BarRenderer) plot.getRenderer()).setMaximumBarWidth(barWidth);

 2

我想用jfreechart做一个折线图,要求横轴是日1期,竖轴是数量。横轴日期为每个月的所有天数。如1月是1-31日,则页面上是31个点的折线图。根据每个月天数不同横轴坐标有不同的天数,问怎样实现?有样例代码也可以。谢谢了。

你的折线图只有一条线?线上有31个点?

给你一个例子,参考着改改就行了。jfc_0.9
package org.jfree.chart.demo;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Polygon;
import java.awt.Shape;
import java.awt.geom.Rectangle2D;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartPanel;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.DefaultDrawingSupplier;
import org.jfree.chart.plot.DrawingSupplier;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;

字串4


import org.jfree.ui.ApplicationFrame;
import org.jfree.ui.RefineryUtilities;

/**
* A line chart demo showing the use of a custom drawing supplier.
*
*/
public class LineChartDemo5 extends ApplicationFrame {

/**
* Creates a new demo.
*
* @param title the frame title.
*/
public LineChartDemo5(final String title) {
super(title);
final CategoryDataset dataset = createDataset();
final JFreeChart chart = createChart(dataset);
final ChartPanel chartPanel = new ChartPanel(chart);
chartPanel.setPreferredSize(new java.awt.Dimension(500, 270));
setContentPane(chartPanel);

}

/**
* Creates a sample dataset.
*
* @return a sample dataset.
*/
private CategoryDataset createDataset() {

// row keys...
final String series1 = "First";
final String series2 = "Second";

字串4


final String series3 = "Third";

// column keys...
final String type1 = "Type 1";
final String type2 = "Type 2";
final String type3 = "Type 3";
final String type4 = "Type 4";
final String type5 = "Type 5";
final String type6 = "Type 6";
final String type7 = "Type 7";
final String type8 = "Type 8";

// create the dataset...
final DefaultCategoryDataset dataset = new DefaultCategoryDataset();

dataset.addValue(1.0, series1, type1);
dataset.addValue(4.0, series1, type2);
dataset.addValue(3.0, series1, type3);
dataset.addValue(5.0, series1, type4);
dataset.addValue(5.0, series1, type5);
dataset.addValue(7.0, series1, type6);
dataset.addValue(7.0, series1, type7);
dataset.addValue(8.0, series1, type8);

字串5



dataset.addValue(5.0, series2, type1);
dataset.addValue(7.0, series2, type2);
dataset.addValue(6.0, series2, type3);
dataset.addValue(8.0, series2, type4);
dataset.addValue(4.0, series2, type5);
dataset.addValue(4.0, series2, type6);
dataset.addValue(2.0, series2, type7);
dataset.addValue(1.0, series2, type8);

dataset.addValue(4.0, series3, type1);
dataset.addValue(3.0, series3, type2);
dataset.addValue(2.0, series3, type3);
dataset.addValue(3.0, series3, type4);
dataset.addValue(6.0, series3, type5);
dataset.addValue(3.0, series3, type6);
dataset.addValue(4.0, series3, type7);
dataset.addValue(3.0, series3, type8);

return dataset;

}

/**
* Creates a sample chart.
*
* @param dataset the dataset.
*
* @return a chart.
字串2
*/
private JFreeChart createChart(final CategoryDataset dataset) {

final JFreeChart chart = ChartFactory.createLineChart(
"Line Chart Demo 5", // chart title
"Type", // domain axis label
"Value", // range axis label
dataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips
false // urls
);

// final StandardLegend legend = (StandardLegend) chart.getLegend();
// legend.setDisplaySeriesShapes(true);

final Shape[] shapes = new Shape[3];
int[] xpoints;
int[] ypoints;

// right-pointing triangle

3

/****
  * 
获取一个演示用的组合数据集对象   (时间曲线图)
  * @return
  */
  private   static   XYDataset   createDataset()
  {  
       TimePeriodValues   timeseries1   =   new   TimePeriodValues("Chart   Title");  
        
       //
这地方可以使用循环,把x轴,y   的值   辅给timeseries1 
       TimePeriodValuesCollection   timeseriescollection   =   new   TimePeriodValuesCollection();  
       for(int i =1;i<10;i++)
       {
        Minute   min   =  new Minute(new Date());
        timeseries1.add(min,   i);  
     
       
        timeseriescollection.addSeries(timeseries1);  
       }
       return   timeseriescollection;  
   }

 

原创粉丝点击