在python和matplotlib中动画轴的大小和2个连续的动画

我在教自己的python数学动画,所以我甚至不知道我问的是否可以用matplotlib。我想要的是 (1)的轴开始小,然后展开。在此之后,我想要它 (2)顺序(一个接一个地)绘制两行,而不是同时(在同一时间),它正在做什么。
我的代码如下,除了我尝试扩展轴(最好我的尝试没有崩溃蟒蛇)。在python和matplotlib中动画轴的大小和2个连续的动画

import time 

import numpy as np

import matplotlib.pyplot as plt

import matplotlib.animation as animation

#from matplotlib.animation import FuncAnimation

maxsize = 8

size = 1

fig = plt.figure(figsize=(maxsize, maxsize))

# fig will start at "size" if I ever figure out the animation

xmin = -10

xmax = 10

ymin = -10

ymax = 10

ax = plt.axes(xlim=(xmin, xmax), ylim=(ymin, ymax))

plt.axhline(linewidth=3, color='black')

plt.axvline(linewidth=3, color='black')

line, = ax.plot([], [], lw=2)

def init1():

line.set_data([], [])

return line,

def animate1(i):

x1 = np.linspace(-10, i/5 - 10, 1000)

y1 = -1*x1

line.set_data(x1, y1)

return line,

def init2():

line.set_data([], [])

return line,

def animate2(j):

x2 = np.linspace(0, j/10, 1000)

y2 = 2*x2

line.set_data(x2, y2)

return line,

plt.grid()

plt.xticks(np.arange(xmin, xmax+1, 1.0))

plt.yticks(np.arange(ymin, ymax+1, 1.0))

anim1 = animation.FuncAnimation(fig, animate1, init_func=init1,

frames=100, interval=20, blit=True)

plt.plot()

plt.show()

time.sleep(1)

anim2 = animation.FuncAnimation(fig, animate2, init_func=init2,

frames=100, interval=20, blit=True)

plt.plot()

plt.show()

所以我想我的问题是: 是我想在matplotlib做可能吗?一?另一个?都? 如果是这样,我该怎么做。

回答:

我不知道如何将你的三个步骤连在一起,我不确定有没有一个优雅的方式。

不过,我尝试了创建与下面的代码为“成长”轴:

fig_size_w = 9 # inches 

fig_size_h = 9 # inches

ax_bottom_x = 0.1 # fig fraction

ax_bottom_y = 0.1 # fig fraction

ax_init_x = 0.1 # fig fraction

ax_init_y = 0.1 # fig fraction

ax_final_x = 0.9 # fig fraction

ax_final_y = 0.9 # fig fraction

grow_steps = 100 # number of steps in the growing process

xmin = -10

xmax = 10

ymin = -10

ymax = 10

grow_step_x = (ax_final_x - ax_init_x)/grow_steps

grow_step_y = (ax_final_y - ax_init_y)/grow_steps

fig = plt.figure(figsize=(fig_size_w, fig_size_h))

ax = fig.add_axes([ax_bottom_x, ax_bottom_y, 0, 0])

def init():

ax.axhline(linewidth=3, color='black')

ax.axvline(linewidth=3, color='black')

ax.grid()

ax.set_xticks(np.arange(xmin, xmax+1, 1.0))

ax.set_yticks(np.arange(ymin, ymax+1, 1.0))

def animate(i):

ax.set_position([ax_bottom_x, ax_bottom_y, (i+1)*grow_step_x, (i+1)*grow_step_y])

anim = matplotlib.animation.FuncAnimation(fig, animate, frames=grow_steps, init_func=init, interval=10)

编辑

其实,我今天在思考这个问题,我有想到创建一个主函数animate()函数,它将接受包含一系列帧的字典作为参数,并为每个帧执行一个函数指针。 的代码可以改善了很多,但概念的证明了这一点的工作:

fig_size_w = 9 # inches 

fig_size_h = 9 # inches

ax_bottom_x = 0.1 # fig fraction

ax_bottom_y = 0.1 # fig fraction

ax_init_x = 0.1 # fig fraction

ax_init_y = 0.1 # fig fraction

ax_final_x = 0.9 # fig fraction

ax_final_y = 0.9 # fig fraction

grow_steps = 100 # number of steps in the growing process

xmin = -10

xmax = 10

ymin = -10

ymax = 10

grow_step_x = (ax_final_x - ax_init_x)/grow_steps

grow_step_y = (ax_final_y - ax_init_y)/grow_steps

fig = plt.figure(figsize=(fig_size_w, fig_size_h))

ax = fig.add_axes([ax_bottom_x, ax_bottom_y, 0, 0])

line, = ax.plot([],[], lw=2)

def init():

ax.axhline(linewidth=3, color='black')

ax.axvline(linewidth=3, color='black')

ax.grid()

ax.set_xticks(np.arange(xmin, xmax+1, 1.0))

ax.set_yticks(np.arange(ymin, ymax+1, 1.0))

def animate(i, func_dict):

a = []

for max_i,func in func_dict.items():

if i < max_i:

a = func(i)

break

return a

def func_grow(i):

ax.set_position([ax_bottom_x, ax_bottom_y, (i+1)*grow_step_x, (i+1)*grow_step_y])

return []

def func_pause(i):

pass

return []

def func_line1(i):

i-=(grow_steps+100) # need to remove offset value in i for it to start at 0

x1 = np.linspace(-10, i/5 - 10, 1000)

y1 = -1*x1

line.set_data(x1, y1)

return line,

def func_line2(j):

j-=(grow_steps+300) # need to remove offset value in j for it to start at 0

x2 = np.linspace(0, j/10, 1000)

y2 = 2*x2

line.set_data(x2, y2)

return line,

anim = matplotlib.animation.FuncAnimation(fig, animate, frames=grow_steps+400, init_func=init, interval=10,

fargs=({grow_steps: func_grow,

grow_steps+100: func_pause,

grow_steps+200: func_line1,

grow_steps+300: func_pause,

grow_steps+400: func_line2},))

注:我不得不降低图形的大小以适合的imgur

以上是 在python和matplotlib中动画轴的大小和2个连续的动画 的全部内容, 来源链接: utcz.com/qa/266870.html

回到顶部