求JFreechart绘制折线图!!高手请进!!急!急!急!

package com;

import java.awt.Color;//颜色系统
import java.text.DateFormat;
import java.text.SimpleDateFormat;//时间格式
import java.util.Calendar;
import java.awt.Paint;//画笔系统
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;

import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.time.*;
import org.jfree.data.time.ohlc.OHLCSeries;
import org.jfree.data.time.ohlc.OHLCSeriesCollection;
import org.jfree.chart.renderer.xy.*;
import org.jfree.chart.axis.*;
import org.jfree.chart.plot.*;
import org.jfree.chart.*;

public class KLineCombineChart {

public static void main(String[] args) {

     SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
     double highValue = Double.MIN_VALUE;//设置K线数据当中的最大值
     double minValue = Double.MAX_VALUE;//设置K线数据当中的最小值
     double high1Value = Double.MIN_VALUE;//设置收盘价当中的最大值
     double min1Value = Double.MAX_VALUE;//设置收盘价当中的最小值
     double high2Value = Double.MIN_VALUE;//设置成交量的最大值
     double min2Value = Double.MAX_VALUE;//设置成交量的最低值
     OHLCSeries series = new OHLCSeries("");//高开低收数据序列,股票K线图的四个数据,依次是开,高,低,收
     TimeSeries series2=new TimeSeries("");//对应时间成交量 的数据
     TimeSeries series1=new TimeSeries("");//对应时间收盘价的数据
     try {
      String value;
      BufferedReader br = new BufferedReader(new FileReader("c://SZ000001.TXT"));
   while((value=br.readLine())!=null){
    String[] a = value.split(" ");
            int year = Integer.parseInt(a[0]);
    int month = Integer.parseInt(a[1]);
    int day = Integer.parseInt(a[2]);
    float open = Float.parseFloat(a[3]);
    float high = Float.parseFloat(a[4]);
    float low = Float.parseFloat(a[5]);
    float close = Float.parseFloat(a[6]);
    int volume = Integer.parseInt(a[7]);
    series.add(new Day(day, month, year), open,high,low,close );
    series2.add(new Day(day, month,year ), volume);
    series1.add(new Day(day, month,year ), close);
    DefaultCategoryDataset dataset=new DefaultCategoryDataset();
    dataset.addValue(close,"MA5","yy-mm-dd");
     
   
   }
  
 } catch (FileNotFoundException e1) {
  // TODO Auto-generated catch block
  e1.printStackTrace();
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }   
     final OHLCSeriesCollection seriesCollection = new OHLCSeriesCollection();//保留K线数据的数据集,必须申明为final,后面要在匿名内部类里面用到
     seriesCollection.addSeries(series);
 
     TimeSeriesCollection timeSeriesCollection1=new TimeSeriesCollection();//保留收盘价的集合
     timeSeriesCollection1.addSeries(series1);
    
     TimeSeriesCollection timeSeriesCollection=new TimeSeriesCollection();//保留成交量数据的集合
     timeSeriesCollection.addSeries(series2);
 
     //获取K线数据的最高值和最低值
     int seriesCount = seriesCollection.getSeriesCount();//一共有多少个序列,目前为一个
     for (int i = 0; i < seriesCount; i++) {
      int itemCount = seriesCollection.getItemCount(i);//每一个序列有多少个数据项
      for (int j = 0; j < itemCount; j++) {
       if (highValue < seriesCollection.getHighValue(i, j)) {//取第i个序列中的第j个数据项的最大值
        highValue = seriesCollection.getHighValue(i, j);
       }
       if (minValue > seriesCollection.getLowValue(i, j)) {//取第i个序列中的第j个数据项的最小值
        minValue = seriesCollection.getLowValue(i, j);
       }
      }

     }
  //获取最高值和最低值
     int seriesCount2 = timeSeriesCollection.getSeriesCount();//一共有多少个序列,目前为一个
     for (int i = 0; i < seriesCount2; i++) {
      int itemCount = timeSeriesCollection.getItemCount(i);//每一个序列有多少个数据项
      for (int j = 0; j < itemCount; j++) {
       if (high2Value < timeSeriesCollection.getYValue(i,j)) {//取第i个序列中的第j个数据项的值
        high2Value = timeSeriesCollection.getYValue(i,j);
       }
       if (min2Value > timeSeriesCollection.getYValue(i, j)) {//取第i个序列中的第j个数据项的值
        min2Value = timeSeriesCollection.getYValue(i, j);
       }
      }

     }
     //获取收盘价
     int seriesCount1 = timeSeriesCollection.getSeriesCount();//一共有多少个序列,目前为一个
     for (int i = 0; i < seriesCount1; i++) {
         int itemCount = timeSeriesCollection.getItemCount(i);//每一个序列有多少个数据项
         double close=timeSeriesCollection.getYValue(i,4);
     }

     final CandlestickRenderer candlestickRender=new CandlestickRenderer();//设置K线图的画图器,必须申明为final,后面要在匿名内部类里面用到
     candlestickRender.setUseOutlinePaint(true); //设置是否使用自定义的边框线,程序自带的边框线的颜色不符合中国股票市场的习惯
     candlestickRender.setAutoWidthMethod(CandlestickRenderer.WIDTHMETHOD_AVERAGE);//设置如何对K线图的宽度进行设定
     candlestickRender.setAutoWidthGap(0.001);//设置各个K线图之间的间隔
     candlestickRender.setUpPaint(Color.RED.brighter());//设置股票上涨的K线图颜色
     candlestickRender.setDownPaint(Color.green.brighter());//设置股票下跌的K线图颜色
 /* 宝塔线*/  // candlestickRender.setUpPaint(Color.RED.brighter());//设置股票上涨的K线图颜色
 /* 宝塔线*/    // candlestickRender.setDownPaint(Color.green.brighter());//设置股票下跌的K线图颜色
   DateAxis x1Axis=new DateAxis();//设置x轴,也就是时间轴
     x1Axis.setAutoRange(true);//设置不采用自动设置时间范围
     x1Axis.setTimeline(SegmentedTimeline.newMondayThroughFridayTimeline());

     x1Axis.setAutoTickUnitSelection(false);//设置不采用自动选择刻度值 (false为以下的主要前提条件)
     x1Axis.setTickMarkPosition(DateTickMarkPosition.MIDDLE);//设置标记的位置
     x1Axis.setStandardTickUnits(DateAxis.createStandardDateTickUnits());//设置标准的时间刻度单位
     x1Axis.setTickUnit(new DateTickUnit(DateTickUnitType.DAY,7));//设置时间刻度的间隔,一般以周为单位
     x1Axis.setDateFormatOverride(new SimpleDateFormat("yyyy-MM-dd"));//设置显示时间的格式
    x1Axis.setLowerMargin(0.02D);//下跌范围
   x1Axis.setUpperMargin(0.02D);//上涨范围
     
     NumberAxis y1Axis=new NumberAxis();//设定y轴,就是数字轴
     y1Axis.setAutoRange(false);//不不使用自动设定范围
     y1Axis.setRange(minValue*0.9, highValue*1.1);//设定y轴值的范围,比最低值要低一些,比最大值要大一些,这样图形看起来会美观些
     y1Axis.setTickUnit(new NumberTickUnit((highValue*1.1-minValue*0.9)/10));//设置刻度显示的密度
  
     XYPlot plot1=new XYPlot(seriesCollection,x1Axis,y1Axis,candlestickRender);//设置画图区域对象
     XYBarRenderer xyBarRender=new XYBarRenderer(){
     private static final long serialVersionUID = 1L;//为了避免出现警告消息,特设定此值
    public Paint getItemPaint(int i, int j){//

       if(seriesCollection.getCloseValue(i,j)>seriesCollection.getOpenValue(i,j)){//

        return candlestickRender.getUpPaint();
       }else{
        return candlestickRender.getDownPaint();
       }
     }};   
     xyBarRender.setMargin(0.1);//设置柱形图之间的间隔
     NumberAxis y2Axis=new NumberAxis();//设置Y轴,为数值,后面的设置,参考上面的y轴设置
     y2Axis.setAutoRange(false);
     y2Axis.setRange(min2Value*0.9, high2Value*1.1);
     y2Axis.setTickUnit(new NumberTickUnit((high2Value*1.1-min2Value*0.9)/5));
     XYPlot plot2=new XYPlot(timeSeriesCollection,null,y2Axis,xyBarRender);//建立第二个画图区域对象,主要此时的x轴设为了null值,因为要与第一个画图区域对象共享x轴
     CombinedDomainXYPlot combineddomainxyplot = new CombinedDomainXYPlot(x1Axis);//建立一个恰当的联合图形区域对象,以x轴为共享轴
     combineddomainxyplot.add(plot1, 3);//添加图形区域对象,后面的数字是计算这个区域对象应该占据多大的区域2/3
        combineddomainxyplot.add(plot2, 1);//添加图形区域对象,后面的数字是计算这个区域对象应该占据多大的区域1/3
        combineddomainxyplot.setGap(5);//设置两个图形区域对象之间的间隔空间
        JFreeChart chart = new JFreeChart("SZ000001   深发展A", JFreeChart.DEFAULT_TITLE_FONT, combineddomainxyplot, false);    
//        JFreeChart chart1=ChartFactory.createLineChart("SZ000001   深发展A",x1Axis,y1Axis,dataset,PlotOrientation.VERTICAL,true,false,false); 
     ChartFrame frame = new ChartFrame("股票行情分析图", chart);
  frame.setJMenuBar(mnb);
     frame.pack();
     frame.setVisible(true);
    
    
}


}

编译出的结果  没有折线图 求高手帮忙写个折线图的代码

00001.TXT的文件的数据是:

2009 11 05 25.38 25.46 24.85 25.05 28931192 727022400.000
2009 11 06 25.39 25.69 24.81 25.10 30297501 762726336.000
2009 11 09 24.91 25.20 24.28 24.86 32796651 810528320.000

 

 

求均线的绘制。。。5日、10日等的均线  求宝塔线的绘制

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我会尝试回答您的问题。 首先需要下载jfreechart的jar包,包含一系列生成折线图的类和方法。接着,您可以使用Java代码来创建一个简单的折线图。下面是一个示例代码: ```java import org.jfree.chart.ChartFactory; import org.jfree.chart.ChartFrame; import org.jfree.chart.JFreeChart; import org.jfree.data.xy.XYDataset; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; public class LineChartExample { public static void main(String[] args) { XYSeriesCollection dataset = new XYSeriesCollection(); XYSeries series1 = new XYSeries("Series 1"); XYSeries series2 = new XYSeries("Series 2"); XYSeries series3 = new XYSeries("Series 3"); series1.add(10, 20); series1.add(20, 30); series1.add(30, 40); series2.add(5, 10); series2.add(15, 20); series2.add(25, 30); series3.add(0, 5); series3.add(10, 15); series3.add(20, 25); dataset.addSeries(series1); dataset.addSeries(series2); dataset.addSeries(series3); JFreeChart chart = ChartFactory.createXYLineChart( "Line Chart Demo", // chart title "X-Axis", // x axis label "Y-Axis", // y axis label dataset // data ); ChartFrame frame = new ChartFrame("Line Chart", chart); frame.setVisible(true); frame.setSize(500, 500); } } ``` 在这个示例代码中,我们创建了一个包含三个系列的折线图。每个系列都有几个数据点,用x、y的坐标值来表示。我们使用XYSeriesCollection来存储所有系列的数据,然后创建一个JFreeChart对象并添加数据集。 最后,我们使用ChartFrame来展示折线图,并设置了窗口的大小。 您可以自己尝试运行这个示例代码,并根据您的需要修改坐标值、系列名、表标题等等。 希望这个回答对您有帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值