使用Func动画python

时间:2014-04-11 17:23:26

标签: python animation matplotlib

以下代码取自here并经过修改以符合我的要求:

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
import math
import linecache
fig = plt.figure()
ax = plt.axes(xlim=(0,600), ylim=(0,600))
line, = ax.plot([], [], lw=3, color='r')
mul=2*math.pi/3
samp_rate=10
print ax
def init():
    line.set_data([], [])
    return line,

def animate(i):
    print i
    global mul
    global samp_rate
    line1=linecache.getline("data.txt", i+1)
    if i==0:
        x = float(line1)*math.cos(0)
        y = float(line1)*math.sin(0)
        line.set_data(x, y)
        return line,
    else:
        x=float(line1)*math.cos((i)*mul/samp_rate)
        y=float(line1)*math.cos((i)*mul/samp_rate)
        line.set_data(x, y)
        return line,

anim = animation.FuncAnimation(fig, animate, init_func=init, interval=5, blit=True)

plt.show()

在打印时,给出的输出如下:

Axes(0.125,0.1;0.775x0.8)

我将值设置为0到600但限制为0.775 to 0.8?为什么会这样? 此外,我绘制的值是100到400,输出窗口是:

enter image description here

我哪里错了?

编辑1:

我稍微更改了代码。现在我从列表中输入值,即,我没有打开值的文件,我只是创建一个包含值的列表。代码是:

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation
import math
import linecache
# First set up the figure, the axis, and the plot element we want to animate
fig = plt.figure()
ax = plt.axes(xlim=(0,600), ylim=(0,600))
line, = ax.plot([], [], lw=3, color='r')
mul=2*math.pi/3
samp_rate=10
print ax

def init():
    line.set_data([], [])
    return line,

def animate(i):
    print i
    global mul
    global samp_rate
    line1=linecache.getline("data.txt", i+1)
    x=[some vlaues that I have to plot]
    y=[some vlaues that I have to plot]
    line.set_data(x, y)
    i+=1
    return line,

anim = animation.FuncAnimation(fig,animate,init_func=init,frames=200,interval=24,blit=True)

plt.show()

在这种情况下,输出如下: enter image description here

另外,当我输入函数动画时,我正在打印i的值,所提供的输出会不断增加。

我为x提供了大约20k的值,为y提供了相同数量的值。正如你在屏幕截图中看到的那样,它没有绘制所有这些。如何绘制所有点?

1 个答案:

答案 0 :(得分:0)

print(ax)没有给出x和y限制。它为您提供图中轴的位置。 print使用方法__str__。在IPython中,您可以使用以下命令查看方法的文档:

In [16]: ax.__str__??
Source:
    def __str__(self):
        return "Axes(%g,%g;%gx%g)" % tuple(self._position.bounds)

您还可以通过以下方式获取轴的位置:

In[4]:ax._position.bounds
Out[4]: (0.125, 0.099999999999999978, 0.77500000000000002, 0.80000000000000004)

要获得轴的x和y限制,请使用:

In[2]: ax.get_ylim()
Out[2]: (0.0, 600.0)

In[3]: ax.get_xlim()
Out[3]: (0.0, 600.0)

我不确定为什么没有看到data.txt的内容而显示行行。我建议检查line1是否符合您的预期。