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

Flask实时监控项目中uPlot图表数据点不显示问题排查

uPlot数据点不显示的排查方案

1. 时间戳格式必须是毫秒级

uPlot默认解析毫秒时间戳作为x轴数据,如果后端返回的是秒级时间戳,直接使用会导致数据被渲染到极早期时间点(1970年左右),肉眼完全看不到。必须把后端的时间戳乘以1000,示例:

// 错误:秒级时间戳
xData = rawData.map(item => item.time);
// 正确:转成毫秒
xData = rawData.map(item => item.time * 1000);

2. 数据结构必须严格匹配uPlot要求

uPlot只认二维数组:第一个元素是x轴全量数据,后续每个元素对应一个y轴系列。不要直接传递后端返回的对象数组,必须做格式转换,示例:

// 后端返回的原始数据(对象数组)
const raw = [{time: 1690000000, cpu: 30}, {time: 1690000010, cpu: 45}];
// 转换成uPlot需要的格式
const uData = [
  raw.map(i => i.time * 1000), // x轴数据
  raw.map(i => i.cpu)          // CPU使用率系列数据
];

3. 检查series配置的dataIdx是否对应正确

每个y系列的dataIdx必须和uData数组的索引一一对应,x轴的series不需要配置,示例:

const opts = {
  series: [
    {}, // x轴占位,无需配置
    {
      label: 'CPU使用率',
      dataIdx: 1 // 对应uData[1],即CPU系列数据
    }
  ]
};

如果dataIdx写错,uPlot找不到对应的数据,自然不会渲染数据点。

4. 确认数据范围在图表可视区内

如果你的y值超出了配置的scale范围,会被渲染到画布外面。比如你设了scale.y.max = 100,但CPU使用率返回了110,数据点就会跑到画布上方看不到。可以临时把scale的min/max设为null,让uPlot自动适配:

const opts = {
  scales: {
    y: {
      min: null, // 自动计算最小值
      max: null  // 自动计算最大值
    }
  }
};

5. 实时更新必须用setData方法

如果是定时拉取数据更新图表,不要每次都重新创建uPlot实例,必须用plot.setData(newData)。而且新数据的结构要和初始数据完全一致,比如x轴的长度要和每个y系列的长度相同。

6. 确保uPlot的CSS正确引入

如果没引入uPlot的官方CSS,默认的点样式可能是透明或者和背景色一致,看起来像是没渲染。必须同时引入CSS和JS:

<link href="https://cdn.jsdelivr.net/npm/uplot@1.6.24/dist/uPlot.min.css" rel="stylesheet">
<script src="https://cdn.jsdelivr.net/npm/uplot@1.6.24/dist/uPlot.min.js"></script>

完整修正示例

假设你的Flask接口/api/metrics返回JSON数组,前端处理代码应该是这样:

async function loadData() {
  const res = await fetch('/api/metrics');
  const rawData = await res.json();
  
  // 转换为uPlot格式
  const plotData = [
    rawData.map(item => item.timestamp * 1000),
    rawData.map(item => item.cpu_usage),
    rawData.map(item => item.mem_usage)
  ];

  // 初始化uPlot(只执行一次)
  if (!window.plot) {
    const opts = {
      width: 800,
      height: 400,
      series: [
        {},
        {label: 'CPU', stroke: '#ff3333'},
        {label: '内存', stroke: '#3366ff'}
      ]
    };
    window.plot = new uPlot(opts, plotData, document.getElementById('chart'));
  } else {
    // 实时更新数据
    window.plot.setData(plotData);
  }
}

// 每2秒更新一次
setInterval(loadData, 2000);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 11:32:45