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

如何使用JFreeChart实现按小时分段、秒级精度的时序图渲染

enter image description here

实现方案(基于JFreeChart 1.5.x版本)

你要的小时分段+秒级精度渲染可以通过DateAxis的主次刻度配置直接实现,不需要自定义复杂逻辑,步骤如下:

1. 准备秒级精度的数据集

使用org.jfree.data.time.Second类封装每个时间点的秒级信息,存入时序数据集:

// 示例:构造秒级时序数据
TimeSeries series = new TimeSeries("监测数据");
// 逐个添加秒级数据点,参数依次为:秒、分、时、日、月、年
series.add(new Second(12, 23, 9, 15, 10, 2024), 23.5);
series.add(new Second(13, 23, 9, 15, 10, 2024), 24.1);
// ... 其他秒级数据
TimeSeriesCollection dataset = new TimeSeriesCollection(series);

2. 配置X轴(时间轴)的主次刻度

这步是实现小时分段、秒级渲染的核心:

DateAxis xAxis = new DateAxis("时间");
// 配置主刻度:1小时为间隔,作为分段边界显示标签
xAxis.setTickUnit(new DateTickUnit(
    DateTickUnitType.HOUR, 
    1, 
    new SimpleDateFormat("yyyy-MM-dd HH:00")
));
// 主刻度标记加粗,突出小时分段效果
xAxis.setTickMarkStroke(new BasicStroke(2f));
xAxis.setTickMarkPaint(Color.BLACK);

// 配置次刻度:1秒为间隔,用于秒级数据点的渲染对齐,不需要显示标签
xAxis.setMinorTickCount(3600); // 1小时包含3600秒,每个主刻度区间划分3600个次刻度
xAxis.setMinorTickMarksVisible(true);
xAxis.setMinorTickPaint(Color.LIGHT_GRAY);

3. 配置渲染器适配秒级精度

直接使用默认的XYLineAndShapeRenderer即可,只要数据集的时间戳正确,会自动匹配到秒级的轴坐标:

XYLineAndShapeRenderer renderer = new XYLineAndShapeRenderer(true, false);
// 可选:打开抗锯齿优化大量秒级点的渲染效果
renderer.setDefaultAntialias(true);

4. 组装图表

XYPlot plot = new XYPlot(dataset, xAxis, new NumberAxis("数值"), renderer);
JFreeChart chart = new JFreeChart("时序监测图", JFreeChart.DEFAULT_TITLE_FONT, plot, true);

如果小时区间内的秒级数据点过多,可以按需做采样聚合减少渲染压力,JFreeChart默认会自动适配画布宽度,不会出现点错位的问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:06:03