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

如何自动调整数据量使折线图平滑并维持约100个数据点?

解决方案:维持折线图数据点在约100个

你可以通过两种核心方式解决这个问题,根据需求选择即可:

1. 只保留最新100个数据点(简单直接)

如果只需要展示近期实时趋势,直接截断数据、保留最新100个点是最高效的方式。需要在类中维护一个全局数据集,每次新增数据后截取末尾100个:

修改代码如下:

class MultiColoredLineChartClass:
    """ Multi-Colored Line Chart Class """
    
    def __init__(self):
        self.data = []  # 维护全局数据集

    def render_chart(self, parent):
        self.figure = plt.figure(figsize=(5, 4), dpi=60)
        self.ax = self.figure.add_subplot(111)
        self.canvas = FigureCanvas(parent, -1, self.figure)
        return self.canvas

    def update_chart(self, new_data=[]):
        # 将新数据追加到全局数据集
        self.data.extend(new_data)
        # 仅保留最新的100个点
        display_data = self.data[-100:] if len(self.data) > 100 else self.data

        self.ax.clear()
        self.ax.plot(display_data)
        self.ax.set_xlabel('Time')
        self.ax.set_ylabel('PNL')
        self.ax.set_title('Live PNL Chart')
        
        self.canvas.draw()

2. 数据降采样(保留历史趋势)

如果需要展示更长周期的历史趋势,同时避免图表杂乱,可以通过降采样合并数据点——把过多的原始数据分组,每组用统计值(平均值、最大值/最小值等)替代,最终将总点数控制在100左右。这里用numpy实现分组聚合:

import numpy as np

class MultiColoredLineChartClass:
    """ Multi-Colored Line Chart Class """
    
    def __init__(self):
        self.data = []  # 维护全局数据集
        self.target_points = 100  # 目标展示数据点数

    def render_chart(self, parent):
        self.figure = plt.figure(figsize=(5, 4), dpi=60)
        self.ax = self.figure.add_subplot(111)
        self.canvas = FigureCanvas(parent, -1, self.figure)
        return self.canvas

    def downsample_data(self):
        if len(self.data) <= self.target_points:
            return self.data
        
        # 计算分组数量与每组大小
        num_groups = self.target_points
        # 按目标点数拆分数据组
        groups = np.array_split(self.data, num_groups)
        
        # 对每组取平均值(可替换为np.max、np.min等聚合方式)
        downsampled = [np.mean(group) for group in groups]
        return downsampled

    def update_chart(self, new_data=[]):
        self.data.extend(new_data)
        display_data = self.downsample_data()

        self.ax.clear()
        self.ax.plot(display_data)
        self.ax.set_xlabel('Time')
        self.ax.set_ylabel('PNL')
        self.ax.set_title('Live PNL Chart')
        
        self.canvas.draw()

选择建议

  • 若只关注短期实时波动,选第一种方法,简单高效。
  • 若需要兼顾长期趋势展示,选第二种方法,通过聚合保留数据核心特征。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 16:02:56