Я использую колчаны matplotlib, чтобы нарисовать несколько векторов в 3d осях. Проблема в том, что когда я хочу добавить виджет ползунка и обновить величину вектора в соответствии с ползунком, как только я меняю положение, все работает, как я ожидал, но я теряю стрелку колчана.
Вот пример кода:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from matplotlib.widgets import Slider
import numpy as np
fig = plt.figure(figsize=(10,6))
ax = fig.gca(projection='3d')
plt.subplots_adjust(bottom=0.15)
ax.set_xlim3d(-1, 1)
ax.set_ylim3d(-1, 1)
ax.set_zlim3d(-1, 1)
pos = [0.0, 0.0, 0.0]
V_ini = [0.5, 0.0, 0.0]
V = ax.quiver(*pos, *V_ini, length=1, normalize=False, color='green')
# SLIDER POSITIONS ON FIGURE
axcolor = 'lightgoldenrodyellow'
axVx = plt.axes([0.1, 0.11, 0.15, 0.02], facecolor=axcolor)
axVy = plt.axes([0.1, 0.08, 0.15, 0.02], facecolor=axcolor)
axVz = plt.axes([0.1, 0.05, 0.15, 0.02], facecolor=axcolor)
# SLIDER PROPERTIES
sliderVx = Slider(axVx, 'Vx', -1, 1, valinit=V_ini[0], valstep=0.01)
sliderVy = Slider(axVy, 'Vy', -1, 1, valinit=V_ini[1], valstep=0.01)
sliderVz = Slider(axVz, 'Vz', -1, 1, valinit=V_ini[2], valstep=0.01)
# QUIVER TO SEGMENT CONVERTER
def q2s(X, Y, Z, u, v, w, length=1):
segments = (X, Y, Z, X+u*length, Y+v*length, Z+w*length)
segments = np.array(segments).reshape(6,-1)
return [[[x, y, z], [u, v, w]] for x, y, z, u, v, w in zip(*list(segments))]
def update(val):
V_ = (sliderVx.val, sliderVy.val, sliderVz.val)
V.set_segments(q2s(*pos, *V_))
sliderVx.on_changed(update)
sliderVy.on_changed(update)
sliderVz.on_changed(update)
plt.show()
Вот как это выглядит раньше:

А после обновления:

Я знаю, что проблема заключается в преобразовании колчанов в линии сегментов, но я не знаю другого способа обновить колчаны. Любая помощь будет оценена.