以下代码取自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,输出窗口是:
我哪里错了?
编辑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()
在这种情况下,输出如下:
另外,当我输入函数动画时,我正在打印i
的值,所提供的输出会不断增加。
我为x提供了大约20k的值,为y提供了相同数量的值。正如你在屏幕截图中看到的那样,它没有绘制所有这些。如何绘制所有点?
答案 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
是否符合您的预期。