You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JFreeChart TimeSeries日期时间格式化及重复添加报错求助

问题根因

你当前使用的org.jfree.data.time.Day是日粒度的时间周期类,同一自然日的所有时间点都会被识别为同一个时间段。你两次采样都在11月20日,所以会被判定为重复时间段触发报错。
同时你的代码还存在一个逻辑错误:timeSeriesCollectionTemps.addSeries(timeSeries)放在了循环内部,会重复往数据集里添加同一个时序对象,后续绘图会触发异常。

修复方案

1. 替换时间周期类为分钟粒度

将你报错行的new Day(gc.getTime())替换为new Minute(gc.getTime()),Minute是JFreeChart提供的分钟级时间周期类,刚好匹配你30分钟的采样间隔,不会出现同周期重复的问题。

2. 调整数据集添加时序的逻辑

把timeSeriesCollectionTemps.addSeries(timeSeries)移到循环结束后执行。

3. 配置X轴显示格式为「月-日-时-分」

绘图时对X轴做日期格式自定义即可。

修复后完整代码示例

import org.jfree.data.time.Minute;
import org.jfree.data.time.TimeSeries;
import org.jfree.data.time.TimeSeriesCollection;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
import java.util.Date;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.DateAxis;
import org.jfree.chart.plot.XYPlot;

// ... 你的其他业务代码
TimeSeries timeSeries = new TimeSeries("温度");
TimeSeriesCollection timeSeriesCollectionTemps = new TimeSeriesCollection();
long time = time_stamp.getTime().getTime() + owc.getFirstLogOffset(state);

GregorianCalendar gc = new GregorianCalendar();
for (int i = 0; i < log.length; i++){
    gc.setTime(new Date(time));
    System.out.println(gc.getTime() + ": " +  Convert.toFahrenheit(owc.decodeTemperature(log [i])) + " F");
    time += sample_rate * 60 * 1000;
    
    double temp = Convert.toFahrenheit(owc.decodeTemperature(log[i]));
    // 替换为Minute粒度
    timeSeries.add(new Minute(gc.getTime()), temp ); 
}
// 循环结束后再添加时序到数据集
timeSeriesCollectionTemps.addSeries(timeSeries);

// 绘图时设置X轴格式
JFreeChart chart = ChartFactory.createTimeSeriesChart(
    "医疗设备温度变化曲线",
    "时间",
    "温度(°F)",
    timeSeriesCollectionTemps,
    true,
    true,
    false
);
XYPlot plot = chart.getXYPlot();
DateAxis xAxis = (DateAxis) plot.getDomainAxis();
// 自定义X轴显示格式:月-日-时-分
xAxis.setDateFormatOverride(new SimpleDateFormat("MM-dd-HH-mm"));

补充说明

如果你的业务场景确实存在同一分钟多个采样点的情况,可以将add()方法替换为addOrUpdate(),新值会覆盖同一周期的旧值,不会触发重复报错。

内容的提问来源于stack exchange,提问作者Noah Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 02:15:09