2016-10-13 3 views
2

Я черчение стрелка график и мой код использует внешний файл следующим образом:Различных цветов для стрелок в колчане участке

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib as mpl 
from pylab import rcParams 

data=np.loadtxt(r'data.dat') 

x = data[:,0] 
y = data[:,1] 
u = data[:,2] 
v = data[:,3] 


plt.quiver(x, y, u, v, angles='xy', scale_units='xy', scale=1, pivot='mid',color='g') 

Файл данных в основном выглядит следующим образом:

0 0 0 1 
0 1 1 0 
1 0 1 0 
1 1 0 1 

, который генерирует сюжет, который выглядит как

enter image description here

есть Aw ay построить это с разными цветами для разных направлений стрелок?

Пс .: У меня есть гораздо больше стрел в моем файле данных в не очень логичном предложении, как тот, который я использую в качестве примера.

ответ

6

Это, вероятно, сделать трюк:

plt.quiver(x, y, u, v, np.arctan2(v, u), angles='xy', scale_units='xy', scale=1, pivot='mid',color='g') 

Обратите внимание, что аргумент в пятом по plt.quiver является цветом. colored arrows


UPD. Если вы хотите управлять цветами, вы должны использовать colormaps. Вот несколько примеров:

Используйте палитру с colors параметра:

import numpy as np 
import matplotlib.pyplot as plt 
import matplotlib.cm as cm 
from matplotlib.colors import Normalize 

%matplotlib inline 

ph = np.linspace(0, 2*np.pi, 13) 
x = np.cos(ph) 
y = np.sin(ph) 
u = np.cos(ph) 
v = np.sin(ph) 
colors = arctan2(u, v) 

norm = Normalize() 
norm.autoscale(colors) 
# we need to normalize our colors array to match it colormap domain 
# which is [0, 1] 

colormap = cm.inferno 
# pick your colormap here, refer to 
# http://matplotlib.org/examples/color/colormaps_reference.html 
# and 
# http://matplotlib.org/users/colormaps.html 
# for details 
plt.figure(figsize=(6, 6)) 
plt.xlim(-2, 2) 
plt.ylim(-2, 2) 
plt.quiver(x, y, u, v, color=colormap(norm(colors)), angles='xy', 
      scale_units='xy', scale=1, pivot='mid') 

different colormap

Вы также можете придерживаться пятый аргумент, как в моем первом примере (который работает в несколько иной способ сравнения с colors) и изменить цветовую карту по умолчанию для управления цветами.

plt.rcParams['image.cmap'] = 'Paired' 

plt.figure(figsize=(6, 6)) 
plt.xlim(-2, 2) 
plt.ylim(-2, 2) 

plt.quiver(x, y, u, v, np.arctan2(v, u), angles='xy', scale_units='xy', scale=1, pivot='mid') 

Paired colormap

Вы также можете создавать свои собственные цветовые карты, смотри, например, here.

+0

Да, это то, что я хотел, но как этот np. (Arctan2 (u, v) на самом деле работает? Я не уверен, что он там делает – Mac

+2

Обычно координата y ('v' в этом случае) передается как первый аргумент в 'arctan2', но это не имеет большого значения. @Mac, arctangent вычисляет угол (в радианах) между вектором стрелки и положительной осью x между -pi и pi. – wflynny

+1

Как вам нужно цвет, чтобы зависеть от угла стрелки, вам нужно как-то вычислить угол. Для этого я использовал функцию * atan2 * ('numpy.arctan2'), которая использует координаты вектора для вычисления угла (в радианах). https://en.wikipedia.org/wiki/Atan2 для получения дополнительной информации. –

Смежные вопросы