如何在matplotlib中重新绘制角度随滑块更新的箭头

2024-06-08 14:45:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我画了一个箭头在一个角度,并使用滑块来改变箭头的角度,然后重新填充它。我的问题是我不能让老箭离开。如果我将dsarrow.remove()放在update函数中,就会得到一个未定义的局部变量错误。在我绘制新箭头之前,思考如何移除旧箭头。如有任何想法或建议,将不胜感激。我的代码如下:

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.widgets import Slider, Button, RadioButtons, CheckButtons # import the Slider widget


def updateArrow(val):
    NewAngle = svalueT.val
    dsarrow.remove() ## Trying to remove the old arrow but get an error 
    xdsl = 1*np.cos(NewAngle * torad)
    ydsl = 1*np.sin(NewAngle * torad)
    darrow = 0.25
    ydsa = 6*np.tan(NewAngle * torad)+darrow
    dsarrow = ax1.arrow(6, ydsa, xdsl, ydsl, head_width=0.15, head_length=0.2, fc='b', ec='b',label="dsa")

#General constants
torad = np.pi/180
xmin = 0
ymin = 0
how xmax = 10
ymax = 10
axcolor = 'lightgoldenrodyellow'

Wedge_Angle = 1.

s_Tmin = 0
s_Tmax = 90
s_Tinit = Wedge_Angle

fig = plt.figure(figsize=(8,6))
ax1 = fig.add_axes([0.10, 0.30, 0.65, 0.60],xlim=(xmin,xmax),ylim=(ymin, ymax))
axis = plt.gca()

## Downstream arrow
xdsl = 1*np.cos(Wedge_Angle * torad)
ydsl = 1*np.sin(Wedge_Angle * torad)
darrow = 0.25
ydsa = 6*np.tan(Wedge_Angle * torad)+darrow
dsarrow = ax1.arrow(6, ydsa, xdsl, ydsl, head_width=0.15, head_length=0.2, fc='b', ec='b',label="arrow")

#Plot slider and Reset button
slider_T = plt.axes([0.12, 0.10, 0.60, 0.04], facecolor=axcolor)    

# Now define slider info
svalueT = Slider(slider_T, r'$\theta$', s_Tmin, s_Tmax, valinit=s_Tinit, valfmt="%1.1f", valstep = 1)
svalueT.on_changed(updateArrow) 

plt.show()


Tags: importnpplt箭头headanglearrownewangle