<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    John Jiang

    a cup of Java, cheers!
    https://github.com/johnshajiang/blog

       :: 首頁 ::  :: 聯(lián)系 :: 聚合  :: 管理 ::
      131 隨筆 :: 1 文章 :: 530 評(píng)論 :: 0 Trackbacks
    JStockChart -- Getting Started(Timeseries)
         本文以一個(gè)示例介紹了如何利用JStockChart生成金融時(shí)序圖。(2009.11.23最后更新)

    1. 環(huán)境要求
        需要JDK 1.5或更高版本。

    2. 下載與安裝
        從JStockChart的站點(diǎn)中下載它的最新版本,當(dāng)前版本是0.4.2。
        解壓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中。

    3. 示例
        在JStockChart的發(fā)行包中,有一個(gè)demo目錄。該目錄包含了一個(gè)簡(jiǎn)單的例子,展示了如何利用JStockChart去生成時(shí)序圖。demo目錄中有一個(gè)Ant腳本build.xml,在該目錄下執(zhí)行命令ant即可運(yùn)行該示例程序。下面是該示例的關(guān)鍵代碼及其說明。
    public class TimeseriesChartDemo {

        
    public static void main(String[] args) throws IOException {
            
    // 

            
    // 創(chuàng)建一個(gè)包含TimeseriesItem的List實(shí)例。
            // 在此處,通過查詢db4o的數(shù)據(jù)庫文件,直接獲得該List.
            
    // 注意:所有的數(shù)據(jù),都必須在"同一天"內(nèi)。
            List data = ;

            
    // 創(chuàng)建SegmentedTimeline實(shí)例,表示時(shí)間區(qū)間"00:00-11:30,13:00-24:00"(即24小時(shí)中空缺了"11:31-12:59"這段時(shí)間)。
            SegmentedTimeline timeline = new SegmentedTimeline(
                    SegmentedTimeline.MINUTE_SEGMENT_SIZE, 
    135189);
            timeline.setStartTime(SegmentedTimeline.firstMondayAfter1900()
                    
    + 780 * SegmentedTimeline.MINUTE_SEGMENT_SIZE);

            
    // 創(chuàng)建TimeseriesDataset實(shí)例,時(shí)間間隔為1分鐘。
            TimeseriesDataset dataset = new TimeseriesDataset(Minute.class1, timeline, true);
            
    // 向dataset中加入TimeseriesItem的List。
            dataset.addDataItems(data);

            
    // 創(chuàng)建邏輯價(jià)格坐標(biāo)軸。指定中間價(jià)為21,顯示9個(gè)坐標(biāo)值,坐標(biāo)值的格式為".00"。
            CentralValueAxis fixedPriceAxis = new CentralValueAxis(new Double("21"), new Range(
                    dataset.getMinPrice().doubleValue(), dataset.getMaxPrice().doubleValue()),
                    
    9new DecimalFormat(".00"));
            
    // 創(chuàng)建價(jià)格區(qū)域
            PriceArea priceArea = new PriceArea(fixedPriceAxis);

            
    // 創(chuàng)建邏輯量坐標(biāo)軸。顯示5個(gè)坐標(biāo)值,坐標(biāo)值的格式為"0"。
            FixedNumberAxis fixedVolumeAxis = new FixedNumberAxis(new Range(dataset
                    .getMinVolume().doubleValue(), dataset.getMaxVolume()
                    .doubleValue()), 
    5new DecimalFormat("0"));
            
    // 創(chuàng)建量區(qū)域
            VolumeArea volumeArea = new VolumeArea(fixedVolumeAxis);

            
    // 創(chuàng)建時(shí)序圖區(qū)域
            TimeseriesArea timeseriesArea = new TimeseriesArea(priceArea,
                    volumeArea, createFixedDateAxis(DateUtils.createDate(
    200811)));

            
    // 通過JStockChartFactory的工廠方法生成JFreeChart實(shí)例。
            
    // 指定了該圖的標(biāo)題為"Timeseries Chart Demo",并且不生成圖例(legend)。
            JFreeChart jfreechart = JStockChartFactory.createTimeseriesChart(
                    
    "Timeseries Chart Demo", dataset, timeline, timeseriesArea, false);

            

            
    // 創(chuàng)建圖像文件。圖像格式為PNG,長為545,寬為300。
            ChartUtilities.saveChartAsPNG(new File(imageFile), jfreechart, 545300);
        }

        
    // 指定時(shí)期坐標(biāo)軸中的邏輯坐標(biāo)。
        private static FixedDateAxis createFixedDateAxis(Date baseDate) {
            FixedDateAxis fixedDateAxis 
    = new FixedDateAxis(baseDate,
                    
    new SimpleDateFormat("HH:mm"));
            fixedDateAxis.addDateTick(
    "09:30", TickAlignment.START);
            fixedDateAxis.addDateTick(
    "10:00");
            fixedDateAxis.addDateTick(
    "10:30");
            fixedDateAxis.addDateTick(
    "11:00");
            fixedDateAxis.addDateTick(
    "11:30", TickAlignment.END);
            fixedDateAxis.addDateTick(
    "13:00", TickAlignment.START);
            fixedDateAxis.addDateTick(
    "13:30");
            fixedDateAxis.addDateTick(
    "14:00");
            fixedDateAxis.addDateTick(
    "14:30");
            fixedDateAxis.addDateTick(
    "15:00", TickAlignment.END);
            
    return fixedDateAxis;
        }
    }
    運(yùn)行該示例程序后,可以生成如下圖片:
    jstockchart-timeseries

    4. 定制圖表
        由于JFreeChart具有高度的可定制性,所以當(dāng)生成了JFreeChart實(shí)例后,你可以從中獲取圖表中的各個(gè)元素,如Plot,然后再定制它們的屬性。詳細(xì)信息請(qǐng)參見JFreeChart的站點(diǎn)和論壇。
        另外,在創(chuàng)建JStockChart的XXXArea對(duì)象時(shí),也可以直接定制若干屬性。如,通過PriceArea類,可以設(shè)置價(jià)格線的顏色(PriceArea.setPriceColor),均線的顏色(PriceArea.setAverageColor);是否顯示均線(PriceArea.setAverageVisible);是否顯示漲跌幅(PriceArea.setRateVisible);...。詳細(xì)信息請(qǐng)參見JStockChart的API文檔。

    posted on 2008-09-08 16:12 John Jiang 閱讀(4005) 評(píng)論(15)  編輯  收藏 所屬分類: Java 、JStockChart 、JFreeChart原創(chuàng)

    評(píng)論

    # re: JStockChart -- Getting Started(Timeseries)(原) 2008-09-08 22:16 扭曲的鉛筆
    你好,目前正在利用JFreechart做實(shí)時(shí)數(shù)據(jù)監(jiān)控??嘤跊]有思路,不知能否告知方法  回復(fù)  更多評(píng)論
      

    # re: JStockChart -- Getting Started(Timeseries)(原) 2008-09-09 00:10 4593
    // 創(chuàng)建SegmentedTimeline實(shí)例,表示時(shí)間區(qū)間"09:30-11:30,13:00-15:00"。
    SegmentedTimeline timeline = new SegmentedTimeline(
    SegmentedTimeline.MINUTE_SEGMENT_SIZE, 1351, 89);
    timeline.setStartTime(SegmentedTimeline.firstMondayAfter1900()
    + 780 * SegmentedTimeline.MINUTE_SEGMENT_SIZE);

    這段代碼剝離中間11:30---13:00中午閉市的依據(jù)是什么?沒看懂1351, 89的由來  回復(fù)  更多評(píng)論
      

    # re: JStockChart -- Getting Started(Timeseries)(原) 2008-09-09 14:50 Sha Jiang
    > 你好,目前正在利用JFreechart做實(shí)時(shí)數(shù)據(jù)監(jiān)控。
    > 苦于沒有思路,不知能否告知方法
    能否簡(jiǎn)述一下需求嗎?
    我猜測(cè)是,一個(gè)程序不停地(計(jì)劃任務(wù))獲取某種數(shù)據(jù),然后根據(jù)該數(shù)據(jù),動(dòng)態(tài)地顯示出圖表。
    JFreeChart可以顯示動(dòng)態(tài)圖表。  回復(fù)  更多評(píng)論
      

    # re: JStockChart -- Getting Started(Timeseries)(原) 2008-09-09 14:56 Sha Jiang
    > 這段代碼剝離中間11:30---13:00中午閉市的依據(jù)是什么?
    > 沒看懂1351, 89的由來
    一天有89分鐘(11:30-13:00)+1351分鐘(其它時(shí)段)=1440分鐘。
    建議你看看SegmentedTimeline的API文檔。  回復(fù)  更多評(píng)論
      

    # re: JStockChart -- Getting Started(Timeseries)(原) 2008-10-18 18:29 maladuola
    你好,看你的jstockchart 很不錯(cuò)。
    不過K線的圖形怎么沒有發(fā)布啊?  回復(fù)  更多評(píng)論
      

    # re: JStockChart -- Getting Started(Timeseries)(原) 2008-10-18 21:37 Sha Jiang
    @maladuola
    目前只實(shí)現(xiàn)了時(shí)序線部分,K線部分還沒去做。
    以后有時(shí)間,再慢慢做吧 ^_^  回復(fù)  更多評(píng)論
      

    # re: JStockChart -- Getting Started(Timeseries)(原) 2008-12-11 16:52 佐佐木屎殼郎
    不錯(cuò)~
    關(guān)注中~  回復(fù)  更多評(píng)論
      

    # re: JStockChart -- Getting Started(Timeseries)(原) 2008-12-30 14:35 figo
    你好,請(qǐng)問jstockchart可以將時(shí)間軸分為3段顯示嗎?比如,新浪上面的黃金期貨可以從上一日的21:00到今日2:30,9:00到11:30,13:30到15:30,我按你的demo修改了我的程序,但得到一個(gè)很奇怪的圖形,不能顯示0:00之后的圖形  回復(fù)  更多評(píng)論
      

    # re: JStockChart -- Getting Started(Timeseries)(原) 2008-12-30 23:02 Sha Jiang
    我想應(yīng)該是可以的。請(qǐng)嘗試嵌套使用SegmentedTimeline。  回復(fù)  更多評(píng)論
      

    # re: JStockChart -- Getting Started(Timeseries)(原) 2009-01-13 15:53 likuan
    樓主能不能稍詳細(xì)講解SegmentedTimeline的用法呢。謝謝,比如我要去掉十一期間:2008-09-29至2008-10-5日之間的日期。試著寫一個(gè)方法來靈活去掉指定日期,比如:
    List<Date> segmentTimeList = new ArrayList<Date>();
    然后去掉segmentTimeLis集合中的指定日期。試著寫了一下,由于對(duì)SegmentedTimelin用法不大熟悉,未能成功。樓主能否指點(diǎn)一二,非常感謝。  回復(fù)  更多評(píng)論
      

    # re: JStockChart -- Getting Started(Timeseries)(原) 2009-11-23 11:05 Sha Jiang
    [Announcement]JStockChart 0.4.2已經(jīng)發(fā)布了!
    從該版本開始,JStockChart將只支持5.0或更高版本的JDK;且兼容JFreeChart 1.0.13。  回復(fù)  更多評(píng)論
      

    # re: JStockChart -- Getting Started(Timeseries)(原) 2010-07-16 11:25 burgess yang
    FixedDateAxis 這個(gè)類我怎么沒有找到?  回復(fù)  更多評(píng)論
      

    # re: JStockChart -- Getting Started(Timeseries)(原) 2010-07-16 19:55 Sha Jiang
    FixedDateAxis --> LogicDateAxis  回復(fù)  更多評(píng)論
      

    # re: JStockChart -- Getting Started(Timeseries)(原) 2010-08-23 20:32 BeanSoft
    @Sha Jiang
    JFreeChart 在實(shí)時(shí)繪圖上效率極差, 因此作者本人也承認(rèn)不能用于下列場(chǎng)合:
    1. 數(shù)據(jù)量過大(例如大于1萬數(shù)據(jù));
    2. 刷新頻率不能過快(甚至一秒一幀都保證不了, 因?yàn)樗看味际侵乩L整個(gè)圖);
    3. 圖多時(shí)極易卡死(例如有40個(gè)曲線圖, 那么基本上就歇菜了).

    本人開發(fā)WebLogic Monitor 時(shí)深切體驗(yàn)到其局限性, 最后不得不拋棄之.  回復(fù)  更多評(píng)論
      

    # re: JStockChart -- Getting Started(Timeseries)(原) 2010-08-24 18:49 Sha Jiang
    @BeanSoft
    感謝你的回復(fù)。

    > JFreeChart 在實(shí)時(shí)繪圖上效率極差
    對(duì)于JFreeChart的性能確實(shí)一直沒有關(guān)注過,因?yàn)槲从迷趯?shí)時(shí)環(huán)境中。

    > 本人開發(fā)WebLogic Monitor 時(shí)深切體驗(yàn)到其局限性, 最后不得不拋棄之.
    想請(qǐng)教一下,你最終是使用什么技術(shù)?  回復(fù)  更多評(píng)論
      

    主站蜘蛛池模板: 中国内地毛片免费高清| 亚洲国产乱码最新视频| 亚洲熟妇av一区二区三区| 亚洲午夜无码AV毛片久久| 亚洲日韩在线中文字幕第一页| 免费少妇a级毛片人成网| 亚洲а∨天堂久久精品| 亚洲不卡AV影片在线播放| 亚洲欧洲国产成人综合在线观看 | 99热这里有免费国产精品| 无码国产精品一区二区免费模式| 无码午夜成人1000部免费视频| 99久久免费精品视频| 18禁无遮挡无码国产免费网站| 四虎免费影院ww4164h| 久久电影网午夜鲁丝片免费| 日本高清免费aaaaa大片视频| 免费国产综合视频在线看| 久久亚洲高清综合| 亚洲va国产va天堂va久久| 亚洲色欲或者高潮影院| 亚洲а∨天堂久久精品9966| 国产综合激情在线亚洲第一页| 一级美国片免费看| 久久久久久AV无码免费网站| 天天影视色香欲综合免费| 成人免费视频国产| 亚洲日韩国产精品第一页一区| 久久亚洲AV成人无码国产| 亚洲一卡2卡3卡4卡乱码 在线| 美女免费视频一区二区| 国产日韩AV免费无码一区二区| 91精品成人免费国产片| 免费毛片在线播放| 中国亚洲女人69内射少妇| 亚洲沟沟美女亚洲沟沟| 国产精品亚洲精品久久精品| 9i9精品国产免费久久| 青青青国产在线观看免费| 国产免费卡一卡三卡乱码| 国精无码欧精品亚洲一区|