#python #matplotlib
#python #matplotlib
Вопрос:
Я пытаюсь нарисовать несколько стрелок, используя matploblib с функцией quiver. Но я хочу выбрать длину каждой стрелки индивидуально, используя массив.
http://matplotlib.sourceforge.net/api/pyplot_api.html#matplotlib.pyplot.quiver
http://matplotlib.sourceforge.net/examples/pylab_examples/quiver_demo.html
В этих демонстрациях и документации показано, что вы можете изменять масштабы пропорционально единицам измерения (x, y, ширина, высота, xy, дюймы, …), есть ли способ определить масштаб для каждой стрелки?
Ответ №1:
Указание местоположения каждой стрелки, а также вектора и длины является чрезмерной спецификацией графика quiver. Итак, что вам нужно сделать, это изменить данные, которые вы выводите на график.
Если у вас есть векторные поля U и V (те же U и V, что и в ваших примерах), вы можете нормализовать их с помощью:
N = numpy.sqrt(U**2 V**2) # there may be a faster numpy "normalize" function
U2, V2 = U/N, V/N
Затем вы можете применить любой массив коэффициентов масштабирования, который вы хотите:
U2 *= F
V2 *= F
Ответ №2:
Если вы хотели бы иметь некоторое представление об относительных векторных величинах для двух векторов, скажем, x и y, вы могли бы попробовать это нелинейное масштабирование:
L = np.sqrt(x**2 y**2)
U = x / L
V = y / L
#If we just plotted U and V all the vectors would have the same length since
#they've been normalized.
m = np.max(L)
alpha = .1
#m is the largest vector, it will correspond to a vector with
#magnitude alpha in the quiver plot
S=alpha /(1 np.log(m/L))
U1=S*U
V1=S*V
plt.figure()
Q = plt.quiver(x,y,U1,V1,scale = 1., units='width')
qk = plt.quiverkey(Q, 0.9, 0.9, 2, r'$2 frac{m}{s}$',
labelpos ='E',coordinates='figure')
Вы можете изменить диапазон значений вектора, увеличивая или уменьшая значение alpha.