【问题标题】:Matplotlib Animation : Graph can't appearMatplotlib 动画:图形无法出现
【发布时间】:2021-06-04 04:53:03
【问题描述】:

最近我设法做了动画。但是现在我不能让切线按照我的意愿走(甚至还没有显示)。切线的公式为y=(2/r)(sqrt(1-((r^2)/4))-1)x +r。该公式是从 2 个圆方程(C1 和 C2)中获得的。 C1(蓝色):x^2+y^2=r^2,C2(绿色):(x-1)^2+y^2=1。我的目标是获得这种动画为,而我当前的动画是这样的

当动画看起来像参考动画(第一个)时,代码应该如何?作为初学者,任何cmets和答案都会对我非常有帮助,我很感激,谢谢。

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

fig, ax = plt.subplots(1)
line, = ax.plot([], [], lw=2)
line2, = ax.plot([], [], lw=2)
ax.set_xlim(-5,5)
ax.set_ylim(-5,5)
# theta goes from 0 to 2pi
theta = np.linspace(0, 2*np.pi, 100)

# the radius of the circle
r = np.sqrt(1)
r2 = np.sqrt(4)

# compute x1 and x2
x1 = 1+r*np.cos(theta)
y1 = r*np.sin(theta)
x2 = r2*np.cos(theta)
y2 = r2*np.sin(theta)

# Move left y-axis and bottim x-axis to centre, passing through (0,0)
ax.spines['left'].set_position('center')
ax.spines['bottom'].set_position('center')

# Eliminate upper and right axes
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')

# Show ticks in the left and lower axes only
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left')

def init():
    line.set_data([], [])
    return line,
def init2():
    line.set_data([], [])
    return line2,
def animate(i):
    x2 = np.sqrt(i)*np.cos(theta)
    y2 = np.sqrt(i)*np.sin(theta)
    line.set_data(x2, y2)
    return line,
def animate2(i):
    x3 = np.linspace(0,r2**2,100)
    y3 = ((2/r2)*(np.sqrt(1-(r2**2)/4)-1)*x3)+r2
    line.set_data(x3, y3)
    return line,

# create the figure
ax.plot(x1,y1)
ax.set_aspect(1)
plt.grid()
anim = animation.FuncAnimation(fig, animate, init_func=init,
                                interval=1000, blit=False,\
                                frames=np.hstack([range(0), 
                                                  range(4)[::-1]]))
anim2 = animation.FuncAnimation(fig, animate2, init_func=init2,
                                interval=1000, blit=False)
                                
plt.show()

f = r"D:/UNPAR/Semester 2/Pemrograman Komputer/Project/SK.gif" 
writergif = animation.PillowWriter(fps=30) 
anim.save(f, writer=writergif)

【问题讨论】:

    标签: python numpy matplotlib matplotlib-animation


    【解决方案1】:

    动画功能需要合二为一。我们将它们组合成一个初始化函数和一个动画函数。

    import numpy as np
    import matplotlib.pyplot as plt
    import matplotlib.animation as animation
    
    fig, ax = plt.subplots(1)
    line, = ax.plot([], [], lw=2, color='green')
    line2, = ax.plot([], [], lw=2, color='red')
    ax.set_xlim(-5,5)
    ax.set_ylim(-5,5)
    
    # theta goes from 0 to 2pi
    theta = np.linspace(0, 2*np.pi, 100)
    
    # the radius of the circle
    r = np.sqrt(1)
    r2 = np.sqrt(4)
    
    # compute x1 and x2
    x1 = 1+r*np.cos(theta)
    y1 = r*np.sin(theta)
    x2 = r2*np.cos(theta)
    y2 = r2*np.sin(theta)
    
    # create the figure
    ax.plot(x1,y1)
    ax.set_aspect(1)
    plt.grid()
    
    def init():
        line.set_data([], [])
        line2.set_data([], [])
        return line,line2
    
    def animate(i):
        x2 = np.sqrt(i)*np.cos(theta)
        y2 = np.sqrt(i)*np.sin(theta)
        print(max(y2))
        line.set_data(x2, y2)
    
        x3 = [0, 4-(0.1*i)]
        y3 = [max(y2), 0]
        line2.set_data(x3, y3)    
        return line,line2
    
    
    anim = animation.FuncAnimation(fig, animate, init_func=init, interval=1000, blit=False,frames=np.arange(10,0,-1))
                     
    plt.show()
    

    【讨论】:

    • 如果我的回答对你有帮助,请考虑采纳为正确答案
    • 让我重复一遍。请使用投票下方的复选标记来接受答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2014-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多