﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Jiangshachina-随笔分类-JFreeChart</title><link>http://www.blogjava.net/jiangshachina/category/34178.html</link><description>同是Java爱好者，相逢何必曾相识！&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;a cup of Java, cheers!</description><language>zh-cn</language><lastBuildDate>Wed, 14 Dec 2011 20:22:47 GMT</lastBuildDate><pubDate>Wed, 14 Dec 2011 20:22:47 GMT</pubDate><ttl>60</ttl><item><title>JStockChart -- Getting Started(Timeseries)(原)</title><link>http://www.blogjava.net/jiangshachina/archive/2008/09/08/227555.html</link><dc:creator>Sha Jiang</dc:creator><author>Sha Jiang</author><pubDate>Mon, 08 Sep 2008 08:12:00 GMT</pubDate><guid>http://www.blogjava.net/jiangshachina/archive/2008/09/08/227555.html</guid><wfw:comment>http://www.blogjava.net/jiangshachina/comments/227555.html</wfw:comment><comments>http://www.blogjava.net/jiangshachina/archive/2008/09/08/227555.html#Feedback</comments><slash:comments>15</slash:comments><wfw:commentRss>http://www.blogjava.net/jiangshachina/comments/commentRss/227555.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jiangshachina/services/trackbacks/227555.html</trackback:ping><description><![CDATA[<div align="center"><strong><span style="font-size: 14pt;">JStockChart -- Getting Started(Timeseries)</span></strong><br />
</div>
<span style="font-size: 10pt;">&nbsp;&nbsp;&nbsp;&nbsp; 本文以一个示例介绍了如何利用</span><span style="font-size: 10pt;"><a href="http://code.google.com/p/jstockchart/">JStockChart</a>生成金融时序图。(2009.11.23最后更新)<br />
<br />
<strong style="font-size: 12pt;">1. 环境要求</strong><br />
&nbsp;&nbsp;&nbsp; 需要JDK 1.5或更高版本。<br />
<br />
<strong style="font-size: 12pt;">2. 下载与安装<br />
</strong>&nbsp;&nbsp;&nbsp; 从<a href="http://code.google.com/p/jstockchart">JStockChart</a>的站点中<a href="http://code.google.com/p/jstockchart/downloads/list">下载</a>它的最新版本，当前版本是0.4.2。<br />
&nbsp;&nbsp;&nbsp; 解压JStockChart的zip文件(jstockchart-0.4.2.zip)后，将jstockchart目录中的jstockchart-0.4.2.jar和jstockchart/lib目录中的jcommon-1.0.16.jar和jfreechart-1.0.13.jar加到classpath中。<br />
<br />
<span style="font-size: 12pt;"><strong>3. 示例</strong></span><br />
&nbsp;&nbsp;&nbsp; 在JStockChart的发行包中，有一个demo目录。该目录包含了一个简单的例子，展示了如何利用JStockChart去生成时序图。demo目录中有一个Ant脚本build.xml，在该目录下执行命令ant即可运行该示例程序。下面是该示例的关键代码及其说明。<br />
</span>
<div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">class</span><span style="color: #000000;">&nbsp;TimeseriesChartDemo&nbsp;{<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">public</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">void</span><span style="color: #000000;">&nbsp;main(String[]&nbsp;args)&nbsp;</span><span style="color: #0000ff;">throws</span><span style="color: #000000;">&nbsp;IOException&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;创建一个包含TimeseriesItem的List实例。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 在此处，通过查询<a href="http://www.db4o.com">db4o</a>的数据库文件，直接获得该List．<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;注意：所有的数据，都必须在"同一天"内。</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;List&nbsp;data&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" />;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;创建SegmentedTimeline实例，表示时间区间"00:00-11:30，13:00-24:00"(即24小时中空缺了"11:31-12:59"这段时间)。</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SegmentedTimeline&nbsp;timeline&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SegmentedTimeline(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SegmentedTimeline.MINUTE_SEGMENT_SIZE,&nbsp;</span><span style="color: #000000;">1351</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">89</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;timeline.setStartTime(SegmentedTimeline.firstMondayAfter1900()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">+</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">780</span><span style="color: #000000;">&nbsp;</span><span style="color: #000000;">*</span><span style="color: #000000;">&nbsp;SegmentedTimeline.MINUTE_SEGMENT_SIZE);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;创建TimeseriesDataset实例，时间间隔为1分钟。</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TimeseriesDataset&nbsp;dataset&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;TimeseriesDataset(Minute.</span><span style="color: #0000ff;">class</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;timeline,&nbsp;</span><span style="color: #0000ff;">true</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;向dataset中加入TimeseriesItem的List。</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataset.addDataItems(data);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;创建逻辑价格坐标轴。指定中间价为21，显示9个坐标值，坐标值的格式为".00"。</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CentralValueAxis&nbsp;fixedPriceAxis&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;CentralValueAxis(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Double(</span><span style="color: #000000;">"</span><span style="color: #000000;">21</span><span style="color: #000000;">"</span><span style="color: #000000;">),&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Range(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dataset.getMinPrice().doubleValue(),&nbsp;dataset.getMaxPrice().doubleValue()),<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">9</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;DecimalFormat(</span><span style="color: #000000;">"</span><span style="color: #000000;">.00</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;创建价格区域</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PriceArea&nbsp;priceArea&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;PriceArea(fixedPriceAxis);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;创建逻辑量坐标轴。显示5个坐标值，坐标值的格式为"0"。</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FixedNumberAxis&nbsp;fixedVolumeAxis&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FixedNumberAxis(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;Range(dataset<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.getMinVolume().doubleValue(),&nbsp;dataset.getMaxVolume()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.doubleValue()),&nbsp;</span><span style="color: #000000;">5</span><span style="color: #000000;">,&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;DecimalFormat(</span><span style="color: #000000;">"</span><span style="color: #000000;">0</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;创建量区域</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;VolumeArea&nbsp;volumeArea&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;VolumeArea(fixedVolumeAxis);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;创建时序图区域</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TimeseriesArea&nbsp;timeseriesArea&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;TimeseriesArea(priceArea,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;volumeArea,&nbsp;createFixedDateAxis(DateUtils.createDate(</span><span style="color: #000000;">2008</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">1</span><span style="color: #000000;">)));<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;通过JStockChartFactory的工厂方法生成JFreeChart实例。<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;指定了该图的标题为"Timeseries&nbsp;Chart&nbsp;Demo"，并且不生成图例(legend)。</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JFreeChart&nbsp;jfreechart&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;JStockChartFactory.createTimeseriesChart(<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #000000;">"</span><span style="color: #000000;">Timeseries&nbsp;Chart&nbsp;Demo</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;dataset,&nbsp;timeline,&nbsp;timeseriesArea,&nbsp;</span><span style="color: #0000ff;">false</span><span style="color: #000000;">);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" /><br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;创建图像文件。图像格式为PNG，长为545，宽为300。</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ChartUtilities.saveChartAsPNG(</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;File(imageFile),&nbsp;jfreechart,&nbsp;</span><span style="color: #000000;">545</span><span style="color: #000000;">,&nbsp;</span><span style="color: #000000;">300</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000;">//</span><span style="color: #008000;">&nbsp;指定时期坐标轴中的逻辑坐标。</span><span style="color: #008000;"><br />
</span><span style="color: #000000;">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">private</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">static</span><span style="color: #000000;">&nbsp;FixedDateAxis&nbsp;createFixedDateAxis(Date&nbsp;baseDate)&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;FixedDateAxis&nbsp;fixedDateAxis&nbsp;</span><span style="color: #000000;">=</span><span style="color: #000000;">&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;FixedDateAxis(baseDate,<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">new</span><span style="color: #000000;">&nbsp;SimpleDateFormat(</span><span style="color: #000000;">"</span><span style="color: #000000;">HH:mm</span><span style="color: #000000;">"</span><span style="color: #000000;">));<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fixedDateAxis.addDateTick(</span><span style="color: #000000;">"</span><span style="color: #000000;">09:30</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;TickAlignment.START);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fixedDateAxis.addDateTick(</span><span style="color: #000000;">"</span><span style="color: #000000;">10:00</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fixedDateAxis.addDateTick(</span><span style="color: #000000;">"</span><span style="color: #000000;">10:30</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fixedDateAxis.addDateTick(</span><span style="color: #000000;">"</span><span style="color: #000000;">11:00</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fixedDateAxis.addDateTick(</span><span style="color: #000000;">"</span><span style="color: #000000;">11:30</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;TickAlignment.END);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fixedDateAxis.addDateTick(</span><span style="color: #000000;">"</span><span style="color: #000000;">13:00</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;TickAlignment.START);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fixedDateAxis.addDateTick(</span><span style="color: #000000;">"</span><span style="color: #000000;">13:30</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fixedDateAxis.addDateTick(</span><span style="color: #000000;">"</span><span style="color: #000000;">14:00</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fixedDateAxis.addDateTick(</span><span style="color: #000000;">"</span><span style="color: #000000;">14:30</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fixedDateAxis.addDateTick(</span><span style="color: #000000;">"</span><span style="color: #000000;">15:00</span><span style="color: #000000;">"</span><span style="color: #000000;">,&nbsp;TickAlignment.END);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff;">return</span><span style="color: #000000;">&nbsp;fixedDateAxis;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}</span></div>
<span style="font-size: 10pt;">运行该示例程序后，可以生成如下图片：<br />
<img alt="jstockchart-timeseries" src="http://farm4.static.flickr.com/3168/2834979157_8d4d2d05da_o.png" height="300" width="545" /><br />
<br />
<strong style="font-size: 12pt;">4. 定制图表<br />
</strong>&nbsp;&nbsp;&nbsp; 由于JFreeChart具有高度的可定制性，所以当生成了JFreeChart实例后，你可以从中获取图表中的各个元素，如Plot，然后再定制它们的属性。详细信息请参见JFreeChart的站点和论坛。<br />
&nbsp;&nbsp;&nbsp; 另外，在创建JStockChart的XXXArea对象时，也可以直接定制若干属性。如，通过PriceArea类，可以设置价格线的颜色(PriceArea.setPriceColor)，均线的颜色(PriceArea.setAverageColor)；是否显示均线(PriceArea.setAverageVisible)；是否显示涨跌幅(PriceArea.setRateVisible)；...。详细信息请参见JStockChart的API文档。<br />
<br />
</span><img src ="http://www.blogjava.net/jiangshachina/aggbug/227555.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jiangshachina/" target="_blank">Sha Jiang</a> 2008-09-08 16:12 <a href="http://www.blogjava.net/jiangshachina/archive/2008/09/08/227555.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JStockChart -- Preview(原)</title><link>http://www.blogjava.net/jiangshachina/archive/2008/08/28/225345.html</link><dc:creator>Sha Jiang</dc:creator><author>Sha Jiang</author><pubDate>Thu, 28 Aug 2008 09:11:00 GMT</pubDate><guid>http://www.blogjava.net/jiangshachina/archive/2008/08/28/225345.html</guid><wfw:comment>http://www.blogjava.net/jiangshachina/comments/225345.html</wfw:comment><comments>http://www.blogjava.net/jiangshachina/archive/2008/08/28/225345.html#Feedback</comments><slash:comments>57</slash:comments><wfw:commentRss>http://www.blogjava.net/jiangshachina/comments/commentRss/225345.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jiangshachina/services/trackbacks/225345.html</trackback:ping><description><![CDATA[<div align="center"><strong><span style="font-size: 14pt;">JStockChart -- Preview</span></strong></div>
<span style="font-size: 10pt;"><a href="http://code.google.com/p/jstockchart/">JStockChart</a>是一款简单但实用的开源图表工具，是对<a href="http://www.jfree.org/jfreechart/">JFreeChart</a>的扩展，仅关注于金融时序图与K线图。(2008.08.29最后更新)<br />
<br />
&nbsp;&nbsp;&nbsp; <a href="http://code.google.com/p/jstockchart/">JStockChart</a>对利用<a href="http://www.jfree.org/jfreechart/">JFreeChart</a>生成金融时序图与K线图进行了简化。目前，JStockChart已实现了时序图部分，包括价格线，均线，量图，中间价和涨跌幅。用户仅需传入指定格式的数据，JStockChart即可生成期望的图片。<br />
&nbsp;&nbsp;&nbsp; 对于时序图，如果提供的数据不是"连续"的，JStockChart能够自动补全缺失的数据--被补数据的价格与最近一笔数据的价格相同，而量为0；价格图的纵坐标以指定的"中间价"为中心均匀分布，可重点突出中间价。<br />
&nbsp;&nbsp;&nbsp; 该项目的源文件会在晚些时候上传到<a href="http://code.google.com/">Google Code</a>中，但可以通过下面一组图片先预览一下JStockChart生成的金融时序图。<br />
<img src="http://farm4.static.flickr.com/3249/2804806291_bc6f603b5c_o.png" alt="JStockChart Demo" height="300" width="545" /><br />
允许指定中间价(20.88)，以中间价为基准向上和向下均匀地分布坐标点；允许自由地指定单个坐标点标签的对齐方式--左对齐，右对齐，居中(对于时间坐标，这尤其有用)。<br />
<br />
<img src="http://farm4.static.flickr.com/3245/2807604255_d04635f488_o.png" alt="JStockChart Demo" height="300" width="545" /><br />
自动补全缺失的数据(黑色方框指示的区域)。<br />
<br />
<img src="http://farm4.static.flickr.com/3053/2804806293_a5338c9ff7_o.png" alt="JStockChart Demo" height="300" width="545" /><br />
允许指定各个坐标轴显示的坐标点的个数。<br />
<br />
<img src="http://farm4.static.flickr.com/3166/2804806297_f063a36a70_o.png" alt="JStockChart Demo" height="300" width="545" /><br />
允许指定是否显示某些图线元素(中间价，均线，涨跌幅，...)。<br />
<br />
<img src="http://farm4.static.flickr.com/3057/2804806301_845ed541f3_o.png" alt="JStockChart Demo" height="300" width="545" /><br />
允许只显示价格线图。<br />
<br />
<img src="http://farm4.static.flickr.com/3277/2804806303_b5c2848e93_o.png" alt="JStockChart Demo" height="300" width="545" /><br />
允许只显示量图。<br />
<span style="font-size: 10pt;"><span style="font-size: 10pt;"><br />
</span>对于时序线图，目前我认为JStockChart的三个功能比较重要：<br />
(a)自动补全非连续数据序列中的"缺失"数据。<br />
(b)以"中间价"为中心，价格坐标均匀分布。<br />
(c)"自由"地定制每个坐标的对齐方式，这对于时间坐标尤为重要。<br />
目前JFreeChart就没有提供上述功能，而<br />
[1]JStockChart扩展了JFreeChart中的DateAxis和NumberAxis，根据用户指定的数据与坐标对齐方式，重新计算并生成了DateTick和NumberTick。<br />
[2]JStockChart对JFreeChart中的TimeSeries进行了修饰，结合SegmentedTimeline，新创建了SegmentedTimeSeries，使得能够自动补全缺失的数据。</span></span><br />
<span style="font-size: 10pt;"><br />
P.S.<br />
由于近期赋闲在家，在欣赏奥运比赛之余，就将自己早前的一些想法付诸实现，并发起了这个开源项目。<br />
虽然JStockChart关注的功能点有限，在设计方面肯定也有不如人意之处，但我仍然认为这是一次很有益的尝试。</span><img src ="http://www.blogjava.net/jiangshachina/aggbug/225345.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jiangshachina/" target="_blank">Sha Jiang</a> 2008-08-28 17:11 <a href="http://www.blogjava.net/jiangshachina/archive/2008/08/28/225345.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>