寫這篇文章是為了把自己研究的東西分享給大家,可能大家已經知道了,那我就獻丑了。
在做金融相關項目的時候,往往會碰到要畫時間序列圖,大家都知道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