2015-01-04 29 views
1

我已經構建了x和y位置的散點圖。現在我有一個具有第三個變量密度的數組,我想根據其密度值爲散點圖中的每個點分配一個顏色。我知道如何使用matplotlib的「分散」的任務做了,例如:現在Matplotlib中的顏色貼圖不使用「散佈」功能

x = [1,2,3,4] 
y = [5,3,7,1] 
density = [1,2,3,4] 

map = plt.scatter(x, y, c=density) 
colorbar = plt.colorbar(map) 

,我想用「陰謀」的功能,而不是做同樣的,是這樣的:

map = plt.plot(x,y, '.', c=t) 

我想做一個銀河合併的動畫,並根據該區域的密度分配每個粒子的顏色。到目前爲止,代碼只能用於「繪圖」任務,所以我需要以這種方式實現,但我發現的所有示例都使用前一種方式。

提前致謝!

+2

要使用'plot',所有東西都必須是相同的顏色(由於它在Agg層下的工作方式)。我想你可能正在'Collection'對象上尋找'set_offsets'方法。 – tacaswell

回答

2

首先,@ tcaswell是正確的。你可能想要animate a scatter plot。使用大量的plot調用會導致比改變scatter返回的集合更糟糕的性能。

然而,這裏是你如何去使用多個plot調用來做到這一點:

import numpy as np 
import matplotlib.pyplot as plt 

xdata, ydata, zdata = np.random.random((3, 10)) 

cmap = plt.cm.gist_earth 
norm = plt.Normalize(zdata.min(), zdata.max()) 

fig, ax = plt.subplots() 
for x, y, z in zip(xdata, ydata, zdata): 
    ax.plot([x], [y], marker='o', ms=20, color=cmap(norm(z))) 

sm = plt.cm.ScalarMappable(norm, cmap) 
sm.set_array(zdata) 
fig.colorbar(sm) 

plt.show() 

enter image description here

只是爲了對比,下面是一個使用scatter完全一樣的事情:

import numpy as np 
import matplotlib.pyplot as plt 

xdata, ydata, zdata = np.random.random((3, 10)) 


fig, ax = plt.subplots() 
scat = ax.scatter(xdata, ydata, c=zdata, s=200, marker='o') 
fig.colorbar(scat) 

plt.show() 

如果你想改變散點圖中標記的位置,你可以使用scat.set_offsets(xydata),wh是一個Nx2類似於數組的序列。

相關問題