java J​F​r​e​e​C​h​a​r​t绘制股票分时图问题

XingFuHaiAnXian 2014-07-04 08:30:19
[code=java][public class Ceshi {

@SuppressWarnings("unchecked")

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

String imageDir = "E:/images";

File images = new File(imageDir);

if (!images.exists()) {

images.mkdir();

}

String imageFile = imageDir + "/jstockchart-timeseries.png";





double lastPrice = 23.50;



//创建一个包含TimeseriesItem的List实例。

//注意:所有的数据,都必须在"同一天"内。

List data = makeTimeseriesItem();

//创建SegmentedTimeline实例,表示时间区间"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);

//创建TimeseriesDataset实例,时间间隔为1分钟。

TimeseriesDataset dataset = new TimeseriesDataset(Minute.class, 1,

timeline, false);

//向dataset中加入TimeseriesItem的List

dataset.addDataItems(data);

//创建逻辑价格坐标轴。指定中间价为lastPrice,显示9个坐标值,坐标值的格式为".00"。

CentralValueAxis logicPriceAxis = new CentralValueAxis(

new Double(lastPrice), new Range(

dataset.getMinPrice().doubleValue(), dataset

.getMaxPrice().doubleValue()), 9,

new DecimalFormat(".00"));

//创建价格区域

PriceArea priceArea = new PriceArea(logicPriceAxis);

//设定显示中线

priceArea.setMarkCentralValue(true);

//设定中线颜色

priceArea.setCentralPriceColor(new Color(0x0000FF));

//不显示均价线

priceArea.setAverageVisible(false);

//设定价格区背景色

priceArea.setBackgroudColor(new Color(0xFFFFCC));

//设定价格线的颜色

priceArea.setPriceColor(new Color(0x330033));



//创建逻辑量坐标轴。显示5个坐标值,坐标值的格式为"0"。

LogicNumberAxis logicVolumeAxis = new LogicNumberAxis(new Range(dataset

.getMinVolume().doubleValue(), dataset.getMaxVolume()

.doubleValue()), 5, new DecimalFormat("0"));

// 创建量区域

VolumeArea volumeArea = new VolumeArea(logicVolumeAxis);

//背景色

volumeArea.setBackgroudColor(new Color(0xFFFFCC));

//设定量图的颜色

volumeArea.setVolumeColor(new Color(0x3366FF));



//创建时序图区域

TimeseriesArea timeseriesArea = new TimeseriesArea(priceArea,

volumeArea, createlogicDateAxis(DateUtils.createDate(2008, 1, 1)));

//设定价格区占的权重

timeseriesArea.setPriceWeight(3);

//通过JStockChartFactory的工厂方法生成JFreeChart实例。

//指定了该图的标题为"Timeseries Chart Demo",并且不生成图例(legend)。

JFreeChart jfreechart = JStockChartFactory.createTimeseriesChart(

"实时走势图", dataset, timeline, timeseriesArea, false);

XYPlot plot = (XYPlot)jfreechart.getPlot();

plot.setBackgroundAlpha(0.618f);



//创建图像文件。图像格式为PNG,长为545,宽为300。

ChartUtilities.saveChartAsPNG(new File(imageFile), jfreechart, 545, 300);

}

//读取文件数据

private static List<TimeseriesItem> makeTimeseriesItem(){
List<TimeseriesItem> list = new ArrayList<TimeseriesItem>();
File dataFile=new File("E:\\测试文件夹","测试.txt");
DateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");
BufferedReader br = null;
try{
br = new BufferedReader(new FileReader(dataFile));
while(true){
String line = br.readLine();
if(line == null){
break;
}
line = line.trim();
if(line.startsWith("cn_") || line.startsWith("#")){
continue;
}
String[] ctx = line.split(";");
Date d = df.parse("2009" + ctx[0] + "00");
double price = Double.parseDouble(ctx[1]);
int v = Integer.parseInt(ctx[2]);
TimeseriesItem ti = new TimeseriesItem(d,price,v);
list.add(ti);
}
}catch(Exception e){
e.printStackTrace();
}finally{
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}

return list;

}

//指定时期坐标轴中的逻辑坐标。

private static LogicDateAxis createlogicDateAxis(Date baseDate) {

LogicDateAxis logicDateAxis = new LogicDateAxis(baseDate,

new SimpleDateFormat("HH:mm"));

logicDateAxis.addDateTick("09:30", TickAlignment.START);

logicDateAxis.addDateTick("10:00");

logicDateAxis.addDateTick("10:30");

logicDateAxis.addDateTick("11:00");

logicDateAxis.addDateTick("11:30", TickAlignment.END);

logicDateAxis.addDateTick("13:00", TickAlignment.START);

logicDateAxis.addDateTick("13:30");

logicDateAxis.addDateTick("14:00");

logicDateAxis.addDateTick("14:30");

logicDateAxis.addDateTick("15:00", TickAlignment.END);


return logicDateAxis;

}

}]
程序数据从文本文档中读取,数据格式为
07040930;6.6;2658
07040931;6.7;5867
07040932;6.8;3567
07040933;6.9;5789
07040934;5.6;6987
07040935;6.6;2658
07040936;6.7;5867
07040937;6.8;3567
07040938;6.9;5789
07040939;506;6987
07040940;6.6;2658
07040941;6.7;5867
07040942;6.8;3567
07040943;6.9;5789
调试过程中,总是提示
You are attempting to add an observation for the time period Sat Jul 04 10:00:00 CST 2009 but the series already contains an observation for that time period. Duplicates are not permitted. Try using the addOrUpdate() method.
请问哪里有问题,有什么解决方法?
...全文
457 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
litaiming 2014-11-03
  • 打赏
  • 举报
回复
绘图没意义吧 算指标的结论才有意义,不知意如何,我读出了*.icl 和*.day 的数据,可以联系一下!哈哈!
XingFuHaiAnXian 2014-07-05
  • 打赏
  • 举报
回复
怎么没有人回答呢,先顶一个

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧