В качестве минимального примера я просто рисую векторы при использовании pyplot.quiver
и хотел бы передать степень вращения в виде ползунка с плавающей точкой:
import numpy as np
import matplotlib.pyplot as plt
def rotvec(vec, deg=0):
rotmat= np.asarray([[np.cos(deg), -np.sin(deg)],[np.sin(deg), np.cos(deg)]])
return np.matmul(rotmat,vec)
def drawvec(x,y):
plt.plot()
plt.quiver(0,0,x,y,angles='xy', scale_units='xy', scale=1)
plt.xlim(xmin=-2, xmax=2)
plt.ylim(ymin=-2, ymax=2)
plt.show()
Теперь, если мы сделаем: drawvec(*rotvec([1,0], np.pi/4))
, мы получимфигура, как и ожидалось.
Есть ли способ сделать что-то вроде ниже, чтобы передать аргумент внутренней функции (ниже не работает):
from ipywidgets import interactive, FloatSlider
from IPython.display import display
from functools import partial
deg = FloatSlider(min=0, max=6.4, value=0)
interactive_plot = interactive(drawvec(*rotvec([1,0])), deg=deg)
Я знаю, что могу написать новую функцию:
def rotndraw(vec, deg=0):
rotated = rotvec(vec,deg)
drawvec(*rotated)
и вызвать ее вместо этого с фиксированным вектором и ползунком с плавающей точкой:
Но я хочу избежать дополнительной функции, которая выставляет аргумент .Это возможно?Может быть с functools.partial
?Я не смог заставить его работать.
Причина: Я хочу не писать обертку для предоставления этого параметра, потому что в моей реальной задаче я делаю серию преобразований с количеством вызовов функций, но единственным параметром (-ами)Я хочу интерактивно манипулировать, возможно, одним из внутренних вызовов функций.И писать разные обертки для выставления разных параметров каждый раз, когда я исследую это, кажется громоздким.