【问题标题】:How to superimpose a plot step by step by iteration in Python?如何在Python中逐步迭代地叠加绘图?
【发布时间】:2019-12-27 09:24:53
【问题描述】:

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

但是,它需要一步一步迭代。就像一个单一的情节应该在每次循环运行时更新。

我现在正在尝试的是

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

这似乎可行,但它会在每次迭代时生成一个图表。

我希望它们都在一个情节中,因为它正在更新。

感谢您的帮助。

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

我想要的是,当叠加一个新图形时,创建的原始图形应该在下一次迭代时更新,而不是在循环结束后一次全部显示。

【问题讨论】:

标签: python plot


【解决方案1】:

这是一个使用 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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-05
    • 1970-01-01
    • 1970-01-01
    • 2019-09-13
    • 2019-10-14
    • 1970-01-01
    • 2011-12-08
    • 2014-02-06
    相关资源
    最近更新 更多