2012-07-18 117 views
1

我是Matplotlib的新手。我每秒都有一個人的位置,我正在試圖做一個圖表來展示這一點。我已經設法展示它,但現在我希望它根據它們的速度顯示不同的顏色。所以,我需要plt.plot()顏色取決於每對點之間的距離,而不是始終相同。 這是我現在:如何在Matplotlib中以不同顏色繪製

x = [i[0] for i in walk] 
y = [i[1] for i in walk] 
plt.clf() 
fig = plt.gcf() 
plt.axis([0, 391, 0, 578]) 
im = plt.imread('field.png') 
cancha = plt.imshow(im) 
plt.plot(x,y) 
plt.axis('off') 
plt.savefig(IMG_DIR + 'match.png',bbox_inches='tight') 
plt.clf() 

我想補充一些變量,根據距離限定的顏色([X [I],值Y [i]],[X [j]的,Y [j]])

有誰知道如何做到這一點?

謝謝!

+1

添加一段代碼,我們將能夠幫助您! – Qiau 2012-07-18 21:31:34

+0

他需要的是一個線條圖形,它將相同的顏色設置爲具有相同速度的位置向量集合 – Blas 2012-07-18 21:56:40

回答

1

scatter會做你想做的(doc)。

plt.scatter(x,y,c=distance(x,y)) 
plt.plot(x,y,'-') # adds lines between points 

但是,這不會連接標記。如果你想在每一段上有不同顏色的線,我認爲你將不得不繪製大量的兩點線。

編輯:添加plot由渦

+0

我認爲這是一個很好的答案。要在點之間添加線段,只需將plt.plot(x,y)與plt.scatter()一起調用,但每個人都要調用一次。 – Vorticity 2012-07-19 04:22:05

1

的意見建議我寫一些代碼來證明我將如何去解決這個問題。據我所知,沒有辦法爲每一條線段着色,因此我必須循環每一步,每次繪製(並選擇合適的顏色)。

import matplotlib.pyplot as plt 
import numpy 

x = numpy.array([1, 1.5, 5, 1, 4, 4]) 
y = numpy.array([1, 2, 1, 3, 5, 5]) 

# calculate the absolute distance for each step 
distances = numpy.abs(numpy.diff((x**2 + y**2)**0.5)) 

ax = plt.axes() 

# pick a colormap, and define a normalization to take distances to the range 0-1 
cmap = plt.get_cmap('jet') 
norm = plt.normalize(min(distances), max(distances)) 

# loop through each walk segment, plotting the line as coloured by 
# the distance of the segment, scaled with the norm and a colour chosen 
# using the normed distance and the cmap 
for i in range(1, len(x)): 
    distance = distances[i-1] 
    x0, y0 = x[i-1], y[i-1] 
    x1, y1 = x[i], y[i] 
    ax.plot([x0, x1], [y0, y1], '-', color=cmap(norm(distance))) 

# put points for each observation (no colouring) 
ax.scatter(x, y) 

# create a mappable suitable for creation of a colorbar 
import matplotlib.cm as cm 
mappable = cm.ScalarMappable(norm, cmap) 
mappable.set_array(distance) 

# create the colorbar 
cb = plt.colorbar(mappable)  
cb.set_label('Distance/meters') 

# add some additional information 
plt.title("Person 1's walk path") 
plt.xlabel('x/meters') 
plt.ylabel('y/meters') 

# add some additional text to show the total distance walked. 
# The coordinates are in axes coordinates (ax.transAxes). 
plt.text(0.99, 0.01, 'Total distance: %.02f meters' % numpy.sum(distances), 
     transform=ax.transAxes, horizontalalignment='right') 

plt.show() 

Code output

希望代碼和註釋有足夠的自我記錄(可映射部分創建彩條也許是最難的,也是最棘手的部分,你甚至可能不會想要一個!)

0

您也可以嘗試quiver。它會繪製方向字段(箭頭)。

import pylab as plt 

x=[12, 13, 14, 15, 16] 
y=[14, 15, 16, 17, 18] 
speed=[1,2,3,4,5] 

# Determine the direction by the difference between consecutive points 
v_x=[j-i for i, j in zip(x[:-1], x[1:])] 
v_x.append(v_x[-1]) # The last point 
v_y=[j-i for i, j in zip(y[:-1], y[1:])] 
v_y.append(v_y[-1]) # The last point 

plt.quiver(x,y,v_x,v_y,speed) 
plt.colorbar() 
plt.xlim(11,17) 
plt.ylim(13,19) 
plt.show() 

enter image description here

如果你願意,你也可以使箭頭的大小依賴於該位置的速度。

相關問題