Как перерисовать стрелку, угол которой обновляется с помощью ползунка в Matplotlib - PullRequest
1 голос
/ 10 января 2020

Я рисую стрелку под углом и с помощью ползунка изменяю угол стрелки, а затем заново рисую ее. Моя проблема в том, что я не могу убрать старую стрелу на go. Если я помещаю dsarrow.remove () в функцию обновления, я получаю локальную переменную не определена ошибка. Мысли о том, как удалить старую стрелку, прежде чем я строю новую. Мысли или предложения будут с благодарностью. Мой код ниже:

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()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...