Matplotlib 动画箱形图

Jos*_*row 3 python animation matplotlib boxplot

当数据随时间序列变化时,我正在尝试为箱线图制作动画。

我正在处理 matplotlib 动画示例,它展示了它如何与 plot 函数一起工作,但这似乎不适用于 boxplot 函数:

代码在下面工作,但将两行更改为箱线图给了我错误

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots()
line, = ax.plot(np.arange(10))  # <-- ax.boxplot(np.arange(10))
ax.set_ylim(0, 20)


def update(data):
    line.set_ydata(data)  # < -- line = ax.boxplot(data)? 
    return line,


def data_gen():
    i = 0
    while True:
        yield np.arange(10) + i
        i += .1

ani = animation.FuncAnimation(fig, update, data_gen, interval=100)
plt.show()
Run Code Online (Sandbox Code Playgroud)

Boxplot 似乎也没有“set_data”函数或“animated=True”参数。

本质上,我希望动画的工作方式与上述相同,但描绘的是箱线图而不是线图。

Jos*_*row 5

我自己想通了:这个想法可以是清除轴,并在每一帧中绘制一个新的箱线图,如下所示。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots()
# line, = ax.boxplot(np.arange(10))  <-- not needed it seems
ax.set_ylim(0, 20)


def update(data):
    ax.cla()  # <-- clear the subplot otherwise boxplot shows previous frame
    ax.set_ylim(0, 20)
    ax.boxplot(x=data)  


def data_gen():
    i = 0
    while True:
        yield np.arange(10) + i
        i += .1

ani = animation.FuncAnimation(fig, update, data_gen, interval=100)
plt.show()
Run Code Online (Sandbox Code Playgroud)