我尝试使用matplotlib.ArtistAnimation
来制作两个子情节的动画。我希望x轴的值随着动画的进行而增加,这样动画的总长度为100,但子情节在任何时候都只显示0-24的时间值,然后迭代到100。
here就是一个很好的例子。该链接使用FuncAnimation
,并使用plot().axes.set_xlim()
和递增x值以滚动方式更新x轴标签。该代码可通过YouTube视频下面的链接获得。
我在下面附加了代码,显示了我尝试复制这些结果,但x限制似乎是最终值,而不是随时间递增。(与轴相反)通过仅绘制将在子图中看到的窗口中的值,但这并不增加x轴的值。我也尝试实现自动缩放,但x轴仍然不更新。
我还发现了this question,这实际上是同样的问题,但这个问题从来没有得到回答。
下面是我的代码:
import matplotlib.pylab as plt
import matplotlib.animation as anim
import numpy as np
#create image with format (time,x,y)
image = np.random.rand(100,10,10)
#setup figure
fig = plt.figure()
ax1=fig.add_subplot(1,2,1)
ax2=fig.add_subplot(1,2,2)
#set up viewing window (in this case the 25 most recent values)
repeat_length = (np.shape(image)[0]+1)/4
ax2.set_xlim([0,repeat_length])
#ax2.autoscale_view()
ax2.set_ylim([np.amin(image[:,5,5]),np.amax(image[:,5,5])])
#set up list of images for animation
ims=[]
for time in xrange(np.shape(image)[0]):
im = ax1.imshow(image[time,:,:])
im2, = ax2.plot(image[0:time,5,5],color=(0,0,1))
if time>repeat_length:
lim = ax2.set_xlim(time-repeat_length,time)
ims.append([im, im2])
#run animation
ani = anim.ArtistAnimation(fig,ims, interval=50,blit=False)
plt.show()
我只想让第二个子绘图(ax2
)更新x轴值。
任何帮助都将不胜感激。
3条答案
按热度按时间7uzetpgm1#
如果你不需要
都可以。
如果您需要运行得更快,您将需要使用用于位块传输的边界框进行游戏,以便更新轴标签。
lymnna712#
如果您正在使用位块传送,则可以在每次更改y/x轴时调用
pyplot.draw()
来重绘整个图形。这会更新整个图形,因此相对较慢,但如果您不称其为许多项,也是可以接受的。
yzuktlbb3#
这会移动轴,但速度非常慢。