2012-10-29 19 views
2

我做了一個三維散點圖,它顯示了一個星團中的星系位置(基本上類似於經度和緯度)作爲其速度的函數。但是,我被要求讓數據點的顏色由代碼中的另一個變量h確定。變量的目的並不重要,但是在我的實際代碼中,每個數據點都由4個數組確定。花了很長時間尋找如何做到這一點後,我終於(幾乎)擁有了它。唯一的問題是,當我繪製它時,只要我移動劇情從不同的方向看它,點的顏色就會改變。另外,我一直在試圖顯示一個顏色條。如何用另一個變量確定的顏色繪製一個3d散點圖?

import pylab as p 
import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import matplotlib.cm as cm 

ra=np.random.random((100)) 
dec=np.random.random((100)) 
h=np.random.random((100)) 
z=np.random.random((100)) 

datamin=min(h) 
datamax=max(h) 
fig=p.figure() 

ax3D=fig.add_subplot(111, projection='3d') 
ax3D.scatter(ra, dec, z, c=h, vmin=datamin, vmax=datamax, 
marker='o', cmap=cm.Spectral) 

p.title("MKW4s-Position vs Velocity") 
p.show() 

回答

1

問題「時重繪更改色彩」是一個bug,但看起來它固定在最新版本(1.1.1)。我已經測試並確認它的工作方式與1.1.1版本相同。

對於colorbar,它需要一個可映射的。你可以使用從scatter返回的收集:

import pylab as p 
import numpy as np 
from mpl_toolkits.mplot3d import Axes3D 
import matplotlib.pyplot as plt 
import matplotlib.cm as cm 

ra=np.random.random((100)) 
dec=np.random.random((100)) 
h=np.random.random((100)) 
z=np.random.random((100)) 

datamin=min(h) 
datamax=max(h) 
fig=p.figure() 

ax3D=fig.add_subplot(111, projection='3d') 
collection = ax3D.scatter(ra, dec, z, c=h, vmin=datamin, vmax=datamax, 
          marker='o', cmap=cm.Spectral) 
p.colorbar(collection) 

p.title("MKW4s-Position vs Velocity") 
p.show() 
+0

嗯......我刪除了舊的,下載了新的,但它仍然不工作。當我重新定位時,他們都變成了藍色。色彩圖看起來不錯,謝謝!編輯:沒關係我是個白癡。 –

相關問題