Масштаб дрожания Matplotlib

#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.