Я хочу указать длину колчанов (стрелы называют колчанами?), пометив их цветом. Это не проблема с 2D-графиками колчана. Вот готово. С 3D-проекцией плохо получается. Этот код воспроизводит проблему.
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.gca(projection='3d')
# Make the grid
x, y, z = np.meshgrid(np.arange(-0.8, 1, 0.2),
np.arange(-0.8, 1, 0.2),
np.arange(-0.8, 1, 0.8))
# Make the direction data for the arrows
u = np.sin(np.pi * x) * np.cos(np.pi * y) * np.cos(np.pi * z)
v = -np.cos(np.pi * x) * np.sin(np.pi * y) * np.cos(np.pi * z)
w = (np.sqrt(2.0 / 3.0) * np.cos(np.pi * x) * np.cos(np.pi * y) *
np.sin(np.pi * z))
M = np.sqrt(u**2 + v**2 + w**2)
ax.quiver(x, y, z, u, v, w, M)
plt.show()
это создает длинную трассировку в нескольких файлах matplotlib и заканчивается
ValueError: object too deep for desired array
Как избежать этой проблемы и пометить колчаны цветом?
@venky__ математически это длина трехмерных векторов. Тот же подход используется здесь для достижения эффекта цветокоррекции стрелок: matplotlib.org/3.1.1/gallery/images_contours_and_fields/…
Ты видел это? stackoverflow.com/questions/28420504/…
Я сделал. Я не понимаю, как это можно применить к проблеме длины
прокрутив весь путь вниз, я вижу, что это полезно и как это можно сделать. @venky__
Как отметил @venky__, подобные вещи обсуждались и раньше. Я поместил это в подпрограмму и скорректировал длину стрелки, даже принимая во внимание комплексные числа в моих массивах.
def plot_3d_quiver(x, y, z, u, v, w):
c = np.sqrt(np.abs(v) ** 2 + np.abs(u) ** 2 + np.abs(w) ** 2)
c = (c.ravel() - c.min()) / c.ptp()
# Repeat for each body line and two head lines
c = np.concatenate((c, np.repeat(c, 2)))
# Colormap
c = plt.cm.jet(c)
fig = plt.figure()
ax = fig.gca(projection='3d')
ax.quiver(x, y, z, u, v, w, colors=c, length=0.1)
plt.show()
Каким должен быть
M
?