2012-01-17 31 views
12

Puanlar için bir renk gradyanı ile 3B grafik nasıl oluşturabilirim? Bir 2D dağılım grafiği için çalışan aşağıdaki örneğe bakın.Renk gradyanlı Matplotlib 3D dağılım grafiği

Düzenleme (Chris'e teşekkürler): 3B grafiğinden görmeyi beklediğim şey, 2D dağılım grafiğinde olduğu gibi kırmızıdan yeşile değişen noktaların renk geçişidir. 3D dağılım grafiğinde gördüğüm sadece kırmızı noktalar.

Çözüm: Bazı nedenlerden dolayı (başka bir yerde kopyaladığım degrade örneğiyle ilgili olarak) xrange'i, 1 boyutlu grafikte her şeyi karıştıran len-1 olarak ayarlıyorum.

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

# Create Map 
cm = plt.get_cmap("RdYlGn") 

x = np.random.rand(30) 
y = np.random.rand(30) 
z = np.random.rand(30) 
#col = [cm(float(i)/(29)) for i in xrange(29)] # BAD!!! 
col = [cm(float(i)/(30)) for i in xrange(30)] 

# 2D Plot 
fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.scatter(x, y, s=10, c=col, marker='o') 

# 3D Plot 
fig = plt.figure() 
ax3D = fig.add_subplot(111, projection='3d') 
ax3D.scatter(x, y, z, s=10, c=col, marker='o') 

plt.show() 
+0

gibi farklı değerler arasında yer alması ölçeği seçebilirsiniz: Burada

A :class:'matplotlib.colors.Colormap' instance or registered name. If *None*, defaults to rc ''image.cmap''. *cmap* is only used if *c* is an array of floats. 
Chris

+0

3B grafiğinden görmeyi beklediğim şey, 2D dağılım grafiğinde olduğu gibi kırmızıdan yeşile değişen noktaların renk geçişidir. 3D dağılım grafiğinde gördüğüm sadece kırmızı noktalar. –

cevap

0

Aşağıdaki işler: Sizinki neden olmadığını anlayamıyorum. Rengi, RGBA yüzerlerinin bir dizisi olarak veya yalnızca yüzer dizisi olarak ayarlayabilmeniz gerekir.

# Create Map 
cm = plt.get_cmap("RdYlGn") 

x = np.random.rand(30) 
y = np.random.rand(30) 
z = np.random.rand(30) 
col = np.arange(30) 

# 2D Plot 
fig = plt.figure() 
ax = fig.add_subplot(111) 
ax.scatter(x, y, s=10, c=col, marker='o') 

# 3D Plot 
fig = plt.figure() 
ax3D = fig.add_subplot(111, projection='3d') 
p3d = ax3D.scatter(x, y, z, s=30, c=col, marker='o')                     

plt.show() 

Ancak, dağılım yardımıyla içinde, ben ilgili olabilir aşağıdakileri görüyoruz. nesi var

Elbette
import matplotlib.cm as cmx 
from mpl_toolkits.mplot3d import Axes3D 
def scatter3d(x,y,z, cs, colorsMap='jet'): 
    cm = plt.get_cmap(colorsMap) 
    cNorm = matplotlib.colors.Normalize(vmin=min(cs), vmax=max(cs)) 
    scalarMap = cmx.ScalarMappable(norm=cNorm, cmap=cm) 
    fig = plt.figure() 
    ax = Axes3D(fig) 
    ax.scatter(x, y, z, c=scalarMap.to_rgba(cs)) 
    scalarMap.set_array(cs) 
    fig.colorbar(scalarMap) 
    plt.show() 

, sen 0 ile 1

+1

", cmap = cm" (ax3D.scatter (x, y, z, s = 30, c = col, marker = 'o', cmap = cm)) eklerken, aynı zamanda renk degrade var. 3D dağılım grafiği. Şimdi özlediğim şey derinlik gibi görünüyor, ama sanırım ikisine de sahip olamıyorum. –

+0

Ne demek derinlikten yoksun? – Cenkoloji

15

degrade renkleri ile 3d dağılım için bir örnektir 3D dağılım grafiği? Bundan ne görmeyi bekliyorsunuz ve gerçekte ne görüyorsunuz? Sizden çağrılarınızı [`Axes3D.scatter`] 'a (http://matplotlib.sourceforge.net/mpl_toolkits/mplot3d/tutorial.html#scatter-plots) doğru şekilde okuyabilirsiniz.
+3

'ax.scatter (z, y, z, c = scalarMap.to_rgba (cs))' ax.scatter olmalıdır (x, y, z, c = scalarMap.to_rgba (cs)) ' – orange

İlgili konular