matplotlib 自动调整数据大小使折线图看起来平滑

vvppvyoh  于 2023-10-24  发布在  其他
关注(0)|答案(1)|浏览(104)

我正在做一个项目,数据从WebSocket中提取出来。
1.我正在将从WebSocket获取的任何数据更新到图表
1.当数据< 100点时,折线图看起来很好
1.但随着数据点的增加,它看起来很复杂。
1.我想保持我的图表平衡约100点
是否有任何实用程序,将自动调整数据点,以保持他们100。

class MultiColoredLineChartClass:
    """ Multi-Colored Line Chart Class """
    
    def __init__(self):
        pass

    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=[]):
        # import random
        # new_data = [random.randint(-10000, 10000) for x in range(0,10)]

        self.ax.clear()
        self.ax.plot(new_data)
        self.ax.set_xlabel('Time')
        self.ax.set_ylabel('PNL')
        self.ax.set_title('Live PNL Chart')
        
        # Redraw the canvas
        self.canvas.draw()
        # thread = threading.Thread(target=self.canvas.draw)
        # thread.daemon = True
        # thread.start()
q1qsirdb

q1qsirdb1#

上图显示了情节的最终状态,你必须运行我的代码来检查它。
首先,我们的Web Socket

def websocket(tmax=1000, dt=0.005):
    from numpy import cos, sin
    w1 = 0.3 ; w2 = 0.4 ; slope = 0.0025
    for t in range(0, tmax):
        sleep(dt)
        yield slope*t + 0.5*(sin(w1*t)-sin(w2*t))

接下来,我们用它

import matplotlib.pyplot as plt

t, y = [], []
tmin = 0 ; dtmax = 101

fig, ax = plt.subplots(figsize=(5, 2), dpi=96, layout='tight')
line = ax.plot(0, 0)[0] # we need a dummy Line2d object
ax.set_ylim(-1, 4) # do you have an a priori idea of the range of values?
ax.set_xlim(tmin, tmin+dtmax)

for t_, y_ in enumerate(websocket()):
    t.append(t_), y.append(y_)
    tmin = max(tmin, t_-dtmax)
    line.remove()
    ax.set_xlim(tmin, tmin+dtmax)
    line = matplotlib.lines.Line2D(t[tmin:tmin+dtmax],
                                   y[tmin:tmin+dtmax])
    ax.add_line(line)
    fig.canvas.draw()
    plt.pause(0.0001)

相关问题