posts - 10,comments - 1,trackbacks - 0

          寫這篇文章是為了把自己研究的東西分享給大家,可能大家已經知道了,那我就獻丑了。
          在做金融相關項目的時候,往往會碰到要畫時間序列圖,大家都知道jfreechart是我們java玩家選擇得比較多的。
          但是有個問題,jfreechart的時間序列圖好像不能給出帶熱點提示的圖出來,因為jfreechart生成出來的是一張圖片,
          我參考了網上很多的文章都沒有給出一個能真正解決問題的方案,所以自己動手搞出來一個。鼠標放在生成出來的圖片上一樣可以出現數據提示!代碼如下!

          帶熱點提示的TimeSeries圖,時間序列圖

          <%@ page language="java" contentType="text/html; charset=UTF-8"
          ?pageEncoding="UTF-8"%>
          <%@ page import="java.awt.*"%>
          <%@ page import="java.io.*"%>
          <%@ page import="org.jfree.chart.*"%>
          <%@ page import="org.jfree.data.time.*"%>
          <%@ page import="org.jfree.chart.plot.*"%>
          <%@ page import="org.jfree.ui.*"%>
          <%@ page import="org.jfree.data.time.TimeSeriesCollection"%>
          <%@ page import="org.jfree.chart.renderer.xy.*"%>
          <%@ page import="org.jfree.chart.axis.*"%>
          <%@ page import="org.jfree.chart.entity.*"%>
          <%@ page import="org.jfree.chart.servlet.*"%>
          <%@ page import="org.jfree.chart.urls.*"%>

          <HTML>
          ?<HEAD>
          ??<TITLE>time series view</TITLE>
          ?</HEAD>
          ?<body>
          ??<%
          ???TimeSeries xyseries = new TimeSeries("finince income", Month.class);
          ???xyseries.add(new Month(1, 2007), 1.0D);
          ???xyseries.add(new Month(2, 2007), 4D);
          ???xyseries.add(new Month(3, 2007), 3D);
          ???xyseries.add(new Month(4, 2007), 5D);
          ???xyseries.add(new Month(5, 2007), 5D);
          ???xyseries.add(new Month(6, 2007), 7D);
          ???xyseries.add(new Month(7, 2007), 7D);
          ???xyseries.add(new Month(8, 2007), 8D);

          ???TimeSeries xyseries1 = new TimeSeries("avg incross rate",
          ?????Month.class);
          ???xyseries1.add(new Month(1, 2007), 3.0D);
          ???xyseries1.add(new Month(2, 2007), 4.9D);
          ???xyseries1.add(new Month(3, 2007), 3.5D);
          ???xyseries1.add(new Month(4, 2007), 4.5D);
          ???xyseries1.add(new Month(5, 2007), 5.5D);
          ???xyseries1.add(new Month(6, 2007), 7D);
          ???xyseries1.add(new Month(7, 2007), 7.9D);
          ???xyseries1.add(new Month(8, 2007), 1.8D);

          ???TimeSeries xyseries2 = new TimeSeries("incross rate", Month.class);
          ???xyseries2.add(new Month(1, 2007), 4.0D);
          ???xyseries2.add(new Month(2, 2007), 6.4D);
          ???xyseries2.add(new Month(3, 2007), 3.8D);
          ???xyseries2.add(new Month(4, 2007), 5.9D);
          ???xyseries2.add(new Month(5, 2007), 8.2D);
          ???xyseries2.add(new Month(6, 2007), 4.2D);
          ???xyseries2.add(new Month(7, 2007), 9.7D);
          ???xyseries2.add(new Month(8, 2007), 5.6D);

          ???TimeSeriesCollection xyseriescollection = new TimeSeriesCollection();
          ???xyseriescollection.addSeries(xyseries);
          ???xyseriescollection.addSeries(xyseries1);
          ???xyseriescollection.addSeries(xyseries2);

          ???JFreeChart jfreechart = ChartFactory.createTimeSeriesChart(
          ?????"Example", "y", "x", xyseriescollection, true, true, true);
          ???jfreechart.setBackgroundPaint(Color.white);
          ???XYPlot xyplot = jfreechart.getXYPlot();

          ???xyplot.setBackgroundPaint(Color.white);
          ???xyplot.setRangeGridlinePaint(Color.black);
          ???xyplot.setDomainGridlinesVisible(false);
          ???xyplot.setRangeGridlinesVisible(true);
          ???xyplot.setAxisOffset(new RectangleInsets(5D, 5D, 5D, 5D));
          ???xyplot.setDomainCrosshairVisible(true);
          ???xyplot.setDomainCrosshairLockedOnData(false);
          ???xyplot.setRangeCrosshairVisible(false);
          ???xyplot.setBackgroundImageAlpha(1.0f);
          ???XYItemRenderer xyitemrenderer = xyplot.getRenderer();

          ???XYLineAndShapeRenderer render = (XYLineAndShapeRenderer) xyplot
          ?????.getRenderer();
          ???render.setURLGenerator(new StandardXYURLGenerator("view.jsp"));
          ???render.setBaseShapesVisible(true);
          ???render.setBaseShapesFilled(true);

          ???xyitemrenderer.setSeriesPaint(0, Color.black);
          ???xyitemrenderer.setSeriesPaint(1, Color.red);
          ???xyitemrenderer.setSeriesStroke(1, new BasicStroke(1.0F, 1, 1, 1.0F,
          ?????new float[] { 5F, 3F }, 0.0F));

          ???IntervalMarker intervalmarker0 = new IntervalMarker(0D, 2D);
          ???intervalmarker0.setLabel("qing");
          ???intervalmarker0.setLabelFont(new Font("SansSerif", 2, 11));
          ???intervalmarker0.setLabelAnchor(RectangleAnchor.LEFT);
          ???intervalmarker0.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
          ???intervalmarker0.setPaint(Color.cyan);
          ???xyplot.addRangeMarker(intervalmarker0, Layer.BACKGROUND);

          ???IntervalMarker intervalmarker = new IntervalMarker(2D, 4D);
          ???intervalmarker.setLabel("huang");
          ???intervalmarker.setLabelFont(new Font("SansSerif", 2, 11));
          ???intervalmarker.setLabelAnchor(RectangleAnchor.LEFT);
          ???intervalmarker.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
          ???intervalmarker.setPaint(Color.yellow);
          ???xyplot.addRangeMarker(intervalmarker, Layer.BACKGROUND);

          ???IntervalMarker intervalmarker1 = new IntervalMarker(4D, 6D);
          ???intervalmarker1.setLabel("nan");
          ???intervalmarker1.setLabelFont(new Font("SansSerif", 2, 11));
          ???intervalmarker1.setLabelAnchor(RectangleAnchor.LEFT);
          ???intervalmarker1.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
          ???intervalmarker1.setPaint(Color.BLUE);
          ???xyplot.addRangeMarker(intervalmarker1, Layer.BACKGROUND);

          ???IntervalMarker intervalmarker2 = new IntervalMarker(6D, 8D);
          ???intervalmarker2.setLabel("nu");
          ???intervalmarker2.setLabelFont(new Font("SansSerif", 2, 11));
          ???intervalmarker2.setLabelAnchor(RectangleAnchor.LEFT);
          ???intervalmarker2.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
          ???intervalmarker2.setPaint(Color.green);
          ???xyplot.addRangeMarker(intervalmarker2, Layer.BACKGROUND);

          ???IntervalMarker intervalmarker3 = new IntervalMarker(8D, 10D);
          ???intervalmarker3.setLabel("hong");
          ???intervalmarker3.setLabelFont(new Font("SansSerif", 2, 11));
          ???intervalmarker3.setLabelAnchor(RectangleAnchor.LEFT);
          ???intervalmarker3.setLabelTextAnchor(TextAnchor.CENTER_LEFT);
          ???intervalmarker3.setPaint(Color.RED);
          ???xyplot.addRangeMarker(intervalmarker3, Layer.BACKGROUND);

          ???DateAxis domainaxis = (DateAxis) xyplot.getDomainAxis();
          ???domainaxis.setTickUnit(new DateTickUnit(DateTickUnit.MONTH, 2));

          ???NumberAxis numberaxis = (NumberAxis) xyplot.getRangeAxis();
          ???numberaxis.setTickUnit(new NumberTickUnit(2D));

          ???String filename = null;
          ???PrintWriter pw = new PrintWriter(out);
          ???StandardEntityCollection sec = new StandardEntityCollection();
          ???ChartRenderingInfo info = new ChartRenderingInfo(sec);

          ???filename = ServletUtilities.saveChartAsPNG(jfreechart, 800, 600,
          ?????info, session);
          ???ChartUtilities.writeImageMap(pw, "map0", info, false);// true or false has big diffenrence
          ???// if choose true,it will js function in html code
          ???String url = request.getContextPath()
          ?????+ "/servlet/DisplayChart?filename=" + filename;
          ??%>
          ??<P ALIGN="CENTER">
          ???<img src="<%=url%>" width=800 height=600 border=1 usemap="#map0">
          ??</P>
          ?</body>
          </html>

          ?

          歡迎交流 qq 569021135



          已有 0 人發表留言,猛擊->>這里<<-參與討論


          JavaEye推薦




          文章來源:http://java-jun.javaeye.com/blog/602629
          posted on 2010-02-25 10:54 uqnetlove 閱讀(200) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 长沙市| 天台县| 大关县| 大安市| 额尔古纳市| 始兴县| 孟津县| 浪卡子县| 江阴市| 荆州市| 山阳县| 商洛市| 杭锦后旗| 濮阳县| 三台县| 龙岩市| 固始县| 汨罗市| 仙居县| 邵武市| 隆化县| 通河县| 宁夏| 任丘市| 高邑县| 沁源县| 方山县| 靖远县| 定结县| 鄂州市| 岳西县| 陇南市| 阿拉善盟| 田东县| 逊克县| 荆门市| 海原县| 涿州市| 保德县| 湖北省| 大荔县|