首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JFreechart SeriesException

JFreechart SeriesException
EN

Stack Overflow用户
提问于 2011-06-01 01:12:18
回答 3查看 4.8K关注 0票数 3

我试图通过引入开始日期和结束日期来使用时间序列绘制条形图,但我遇到了一个问题,它指示的结束日期: Exception in thread "main“org.jfree.data.general.SeriesException:您正在尝试添加一个时间段4-mai-2011的观察值,但该系列已经包含该时间段的观察值。不允许重复。尝试使用addOrUpdate()方法。

代码语言:javascript
复制
final TimeSeries series2 = new TimeSeries("ip max", Day.class);

String datebegin = "04/29/2011 02:00:01";
String dateend = "05/04/2011 02:00:01";
DateFormat formatter;
Date date;
formatter = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
date = formatter.parse(datebegin);
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date);
Date date2;
date2 = (Date) formatter.parse(dateend);
Calendar cal2 = Calendar.getInstance();
cal2.setTime(date2);
while (((cal1.compareTo(cal2)) != 0))  {
    cal1.add(Calendar.HOUR, 24);
    String intermediatestringdate = formatter.format(cal1.getTime());
    System.out.println( intermediatestringdate);
    Date intermediatedate = (Date) formatter.parse(dateend);
    series2.add(new Day(intermediatedate),500);
}
EN

回答 3

Stack Overflow用户

发布于 2011-06-02 11:31:29

假设您正在使用带有IntervalXYDatasetChartFactory.createXYBarChart()创建基于时间的条形图,只需使用合适的TimePeriod构造TimeSeries的域即可。

代码语言:javascript
复制
private static IntervalXYDataset createDataset() {
    TimeSeries series = new TimeSeries("Series");
    RegularTimePeriod day = new Day(29, 4, 2011);
    RegularTimePeriod end = new Day(4, 5, 2011);
    int i = 1;
    while (day.compareTo(end) < 1) {
        series.addOrUpdate(day, i++);
        day = day.next();
    }
    TimeSeriesCollection dataset = new TimeSeriesCollection();
    dataset.addSeries(series);
    return dataset;
}

另外,请注意TimeSeries不再需要Day.class

票数 7
EN

Stack Overflow用户

发布于 2013-07-12 09:38:29

如果您将TimeSeries和TimeSeriesCollection更改为TimePeriodValues和TimePeriodValuesCollection,您将没有唯一的时间约束来处理。

这就是我所做的,我能够沿着x轴绘制精确到毫秒的时间值:

代码语言:javascript
复制
    TimePeriodValues data = new TimePeriodValues("duration"); 
    for(int x=0; x<_stats.getDataPoints().size();x++)
    {
        DataPoint dp = _stats.getDataPoints().get(x); 
        data.add(new Millisecond(dp._date),dp._duration); 
    }
    TimePeriodValuesCollection dataset = new TimePeriodValuesCollection(); 

    dataset.addSeries(data); 
    JFreeChart chart = ChartFactory.createScatterPlot("Title", "start time", "duration (millis)", dataset, PlotOrientation.VERTICAL, true, true, false);
    XYPlot plot = chart.getXYPlot();
    plot.setDomainAxis(new DateAxis()); 
    DateAxis domainAxis = (DateAxis)plot.getDomainAxis(); 
    domainAxis.setDateFormatOverride(new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS")); 
    ChartUtilities.saveChartAsPNG(new File(_reportFolder+File.separator+uuid+".png"), chart, 500, 300);
票数 2
EN

Stack Overflow用户

发布于 2013-10-23 05:03:07

我相信这就是问题的根源。在TimeSeries中添加时间/值列表时,添加的时间点在整个列表中必须是唯一的。

代码语言:javascript
复制
series2.add(new Day(intermediatedate),500);

否则,如果列表中存在该时间的可能性,则使用addOrUpdate。

代码语言:javascript
复制
series2.addOrUpdate(new Day(intermediatedate),500);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6191070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档