天天看點

JFreeChart使用心得與例子

涓???JFreeChart??浠?缁?涓??峰??

JFreeChart寮???????涓?涓?寮?婧???Java?懼艦寮?????,瀹?浠??卞艦?撅?楗煎艦?撅??伴?瘋揪?撅??$???劇??绛?????涓???,??浠ュ??/s,b/s,???蟲??瀹??剁??澧??借?戒??捐韓????

褰?????JFreeChart?????扮????涓?freechart-1.0.0-rc1.zip????浠ュ??

????http://www.jfree.org/jfreechart/ ... asspath??澧?????涓???????

浜???JFreeChart???烘??浣跨??

涓?璁哄??寤虹????浠?涔??撅?JFreeChart?介?靛驚浠ヤ???杩?涓?浣跨?ㄦ?ラ?わ?

1??寤虹??Dataset?????????版???藉???懼??ataset涓?????(??寤轟?涓??版??婧?锛?dataset锛??ュ????灏?瑕??ㄥ?懼艦涓??劇ず???版??)

2??寤虹??JFreeChart??灏?dataset涓????版??瀵煎?ュ??FreeChart涓???(??寤轟?涓? JFreeChart 瀵矽薄?ヤ唬琛ㄨ??劇ず???懼艦 )

3??璁劇疆JFreeChart???劇ず灞??с??杩?涓?姝ュ??浠ョ???ワ?浣跨?ㄩ?璁ょ??JFreeChart?劇ず灞??с??

3??娓叉???捐〃???崇?????劇????

4??椤甸?㈠?劇???劇ず??

??瑕???绫誨???ュ?o?

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

涓???JFreeChart浣跨?ㄧ???蜂?渚?瀛?

??eb搴??ㄤ腑??渚?瀛?

/*

* ??寤烘?ユ?? 2006-8-1

* @author:hong

* FileName:LineXYChart.java

*/

package com.hong.bean;

import java.awt.Color;

import java.awt.Font;

import java.io.IOException;

import java.io.PrintWriter;

import java.text.NumberFormat;

import java.text.SimpleDateFormat;

import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.ChartRenderingInfo;

import org.jfree.chart.ChartUtilities;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.axis.DateAxis;

import org.jfree.chart.axis.NumberAxis;

import org.jfree.chart.entity.StandardEntityCollection;

import org.jfree.chart.labels.StandardXYToolTipGenerator;

import org.jfree.chart.plot.XYPlot;

import org.jfree.chart.renderer.xy.XYItemRenderer;

import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;

import org.jfree.chart.servlet.ServletUtilities;

import org.jfree.chart.title.TextTitle;

import org.jfree.data.time.Day;

import org.jfree.data.time.TimeSeries;

import org.jfree.data.time.TimeSeriesCollection;

import org.jfree.data.xy.XYDataset;

import org.jfree.ui.RectangleInsets;

/**

* @author hong ?茬嚎?劇??缁???

*/

public class LineXYChart

{

? ? /**

? ???* 杩????????劇??????浠跺??

? ???* @param session

? ???* @param pw

? ???* @return ?????劇??????浠跺??

? ???*/

? ? public String getLineXYChart(HttpSession session, PrintWriter pw)

? ? {

? ?? ???XYDataset dataset = this.createDateSet();//寤虹???版????

? ?? ???String fileName = null;

? ?? ???//寤虹??JFreeChart

? ?? ???JFreeChart chart = ChartFactory.createTimeSeriesChart(

? ?? ?? ?? ?? ? "JFreeChart?堕?存?茬嚎搴?????, // title

? ?? ?? ?? ?? ? "Date", // x-axis label

? ?? ?? ?? ?? ? "Price", // y-axis label

? ?? ?? ?? ?? ? dataset, // data

? ?? ?? ?? ?? ? true, // create legend?

? ?? ?? ?? ?? ? true, // generate tooltips?

? ?? ?? ?? ?? ? false // generate URLs?

? ?? ?? ?? ?? ? );

? ?? ???//璁劇疆JFreeChart???劇ず灞???瀵瑰?懼艦澶??ㄩ?ㄥ??杩?琛?璋???

? ?? ???chart.setBackgroundPaint(Color.red);//璁劇疆?茬嚎?捐??????

? ?? ???//璁劇疆瀛?浣?澶у?锛?褰㈢??

? ?? ???Font font = new Font("瀹?浣?", Font.BOLD, 16);

? ?? ???TextTitle title = new TextTitle("JFreeChart?堕?存?茬嚎搴?????, font);

? ?? ???chart.setTitle(title);

? ?? ???XYPlot plot = (XYPlot) chart.getPlot();//?峰???懼艦???誨?

? ?? ???plot.setBackgroundPaint(Color.lightGray);//璁劇疆缃??艱??????

? ?? ???plot.setDomainGridlinePaint(Color.green);//璁劇疆缃??肩??绾?Domain杞?棰???

? ?? ???plot.setRangeGridlinePaint(Color.white);//璁劇疆缃??兼í绾塊???

? ?? ???plot.setAxisOffset(new RectangleInsets(5.0, 5.0, 5.0, 5.0));//璁劇疆?茬嚎?句?xy杞寸??璺?绂?

? ?? ???plot.setDomainCrosshairVisible(true);

? ?? ???plot.setRangeCrosshairVisible(true);

? ?? ???XYItemRenderer r = plot.getRenderer();

? ?? ???if (r instanceof XYLineAndShapeRenderer)

? ?? ???{

? ?? ?? ?? ?XYLineAndShapeRenderer renderer = (XYLineAndShapeRenderer) r;

? ?? ?? ?? ?renderer.setDefaultShapesVisible(true);

? ?? ?? ?? ?renderer.setDefaultShapesFilled(true);

? ?? ?? ?? ?renderer.setShapesVisible(true);//璁劇疆?茬嚎?????劇ず?版????

? ?? ???}

? ?? ???//璁劇疆Y杞?

? ?? ???NumberAxis numAxis = (NumberAxis) plot.getRangeAxis();

? ?? ???NumberFormat numFormater = NumberFormat.getNumberInstance();

? ?? ???numFormater.setMinimumFractionDigits(2);

? ?? ???numAxis.setNumberFormatOverride(numFormater);

? ?? ???//璁劇疆??绀轟俊??

? ?? ???StandardXYToolTipGenerator tipGenerator = new StandardXYToolTipGenerator(

? ?? ?? ?? ?? ? "???蹭俊??

{1} 16:00,{2})", new SimpleDateFormat("MM-dd"

,

? ?? ?? ?? ?? ? numFormater);

? ?? ???r.setToolTipGenerator(tipGenerator);

? ?? ???//璁劇疆X杞達??ユ??杞達?

? ?? ???DateAxis axis = (DateAxis) plot.getDomainAxis();

? ?? ???axis.setDateFormatOverride(new SimpleDateFormat("MM-dd"

);

? ?? ???ChartRenderingInfo info = new ChartRenderingInfo(

? ?? ?? ?? ?? ? new StandardEntityCollection());

? ?? ???try

? ?? ???{

? ?? ?? ?? ?fileName = ServletUtilities.saveChartAsPNG(chart, 500, 300, info,

? ?? ?? ?? ?? ?? ???session);//?????劇??

//? ?? ?? ? Write the image map to the PrintWriter

? ?? ?? ?? ?ChartUtilities.writeImageMap(pw, fileName, info, false);

? ?? ???}

? ?? ???catch (IOException e)

? ?? ???{

? ?? ?? ?? ?e.printStackTrace();

? ?? ???}

? ?? ???pw.flush();

? ?? ???return fileName;//杩????????劇??????浠跺??

? ? }

? ? /**

? ???* 寤虹???????懼艦???????版????

? ???* @return 杩????版????

? ???*/

? ? private XYDataset createDateSet()

? ? {

? ?? ???TimeSeriesCollection dataset = new TimeSeriesCollection();//?堕?存?茬嚎?版??????

? ?? ???TimeSeries s1 = new TimeSeries("???叉?茬嚎", Day.class);//??寤烘?堕?存?版??婧?锛?姣?涓?涓?//TimeSeries?ㄥ?句???涓??℃?茬嚎

? ?? ???//s1.add(new Day(day,month,year),value),娣誨???版???逛俊??

? ?? ???s1.add(new Day(1, 2, 2006), 123.51);

? ?? ???s1.add(new Day(2, 2, 2006), 122.1);

? ?? ???s1.add(new Day(3, 2, 2006), 120.86);

? ?? ???s1.add(new Day(4, 2, 2006), 122.50);

? ?? ???s1.add(new Day(5, 2, 2006), 123.12);

? ?? ???s1.add(new Day(6, 2, 2006), 123.9);

? ?? ???s1.add(new Day(7, 2, 2006), 124.47);

? ?? ???s1.add(new Day(8, 2, 2006), 124.08);

? ?? ???s1.add(new Day(9, 2, 2006), 123.55);

? ?? ???s1.add(new Day(10, 2, 2006), 122.53);

? ?? ???dataset.addSeries(s1);

? ?? ???dataset.setDomainIsPointsInTime(true);

? ?? ???return dataset;

? ? }

}

??sp??浠朵腑?劇ず?劇??

棣?????eb搴??ㄧ?搴??ㄧ講??浠?eb.xml涓?娣誨??浠ヤ?浠g??:

<!-- ?劇???劇ず锛?浣跨?ㄤ??ㄧ??servlet?ヨ?琛??劇ず锛?瀹?浼?瀹???璺?寰?????绱㈠????灏? -->

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

?跺????sp涓??劇ず?劇??

瀹??寸??jsp??浠訛?

<!--??浠跺??绉幫?timeLine.jsp-->

<%@ page contentType="text/html;charset=gb2312" pageEncoding="GB2312"%>

<%@ page import="com.hong.bean.LineXYChart"%>

<%@ page import = "java.io.PrintWriter" %>

<%

LineXYChart xyChart=new LineXYChart();

String fileName=xyChart.getLineXYChart(session,new PrintWriter(out));

??String graphURL = request.getContextPath() + "/servlet/DisplayChart?filename=" + fileName;

%>

<html>

</head>

<title> JFreeChart浣跨?ㄤ?瀛?</title>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

</head>

<body>

<img src="<%= graphURL %>" width=500 height=300 border=0 usemap="#<%= fileName %>">

</body>