如何在Python中逐步地叠加绘图?

时间:2019-08-22 05:54:18

标签: python plot

我有一些数据框,试图将它们绘制在一个图中。

但是,它需要逐步进行迭代。就像一个图应该在每次循环运行时更新。

我现在正在尝试的是

for i in range(0, len(df))
    plt.plot(df[i].values[:,0], df[i].values[:,1])
plt.show()

这似乎可行,但每次迭代都会生成一个图形。

我希望它们在更新时都在一个图中。

感谢您的帮助。

编辑:关于答案,您提到的内容不包含我想要的内容。 那只是叠加两个数据集。

我想要的是,随着新图的叠加,创建的原始图应在下一次迭代时更新,而不是在循环结束后立即显示所有图。

1 个答案:

答案 0 :(得分:0)

这是一个使用matplotlib的动画功能自动更新的情节示例。但是,您也可以在必要时自己调用更新例程:

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

import matplotlib.animation as animation
from matplotlib.animation import FuncAnimation

df = pandas.DataFrame(data=np.linspace(0, 100, 101), columns=["colA"])


fig = plt.figure()
ax = plt.gca()

ln, = ax.plot([], [], "o", mew=2, mfc="None", ms=15, mec="r")

class dataPlot(object):
    def __init__(self):
        self.objs = ax.plot(df.loc[0,"colA"], "g*", ms=15, mew=2, mec="g", mfc="None", label="$Data$")
        fig.legend(self.objs, [l.get_label() for l in self.objs], loc="upper center", prop={"size":18}, ncol=2)

    def update(self, iFrame):
        for o in self.objs:
            o.remove()

        print("Rendering frame {:d}".format(iFrame))

        self.objs = ax.plot(df.loc[iFrame,"colA"], "g*", ms=15, mew=2, mec="g", mfc="None", label="$Data$")

        return ln,

dp = dataPlot()
ani = FuncAnimation(fig, dp.update, frames=df.index, blit=True)

plt.show()