JFreeChartD

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;  
   }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章