Python 3.5.4 matplotlib无法绘制动画人物

时间:2017-12-10 10:43:56

标签: python python-3.x matplotlib

我想使用python3.5.4的matplotlib包绘制动画图表,matplotlib官方网站的示例在我的本地Python环境中运行良好。

但是我写的这些代码无法向我显示任何图表,我无法弄清楚这些代码中的问题,所以我来这里寻求帮助。这是我的代码。

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


class Plot(object):
    def __init__(self, update_func, frames):
        self.x_data, self.y_data = [], []
        self.update_func = update_func
        self.frames = frames
        self.t = 0

    def draw(self):
        fig = plt.figure()
        self.ax = plt.axes()
        self.line, = self.ax.plot([1, 2, 3, 4], [1, 2, 3, 4], lw=2)

        # Without invoke the FuncAnimation can display the chart.
        self.ani_ref = FuncAnimation(fig, self._update, frames=self.frames, blit=True,
                                     interval=20, init_func=self._animation_init)
        plt.show()

    def _animation_init(self):
        self.line.set_data(self.x_data, self.y_data)
        return self.line

    def _update(self, i):
        # modified the data from outside update function
        self.x_data, self.y_data = self.update_func(self.x_data, self.y_data)

        x_min, x_max = self.ax.get_xlim()
        y_min, y_max = self.ax.get_ylim()

        if np.max(self.x_data) >= x_max:
            x_max = np.max(self.x_data) + 10
        if np.min(self.x_data) <= x_min:
            x_min = np.min(self.x_data) - 10

        if np.max(self.y_data) >= y_max:
            y_max = np.max(self.y_data) + 10
        if np.min(self.y_data) <= y_min:
            y_min = np.min(self.y_data) - 10

        self.ax.set_xlim(x_min, x_max)
        self.ax.set_ylim(y_min, y_max)
        self.ax.figure.canvas.draw()

        self.line.set_data(self.x_data, self.y_data)

        return self.line


if __name__ == "__main__":

    def update(x_data, y_data):
        x, y = x_data[-1], np.sin(2 * np.pi * (x_data[-1] + 0.1))
        x_data.append(x)
        y_data.append(y)
        return x_data, y_data


    p = Plot(update_func=update, frames=100)
    p.draw()

0 个答案:

没有答案