2012-01-17 22 views
12

के साथ Matplotlib 3 डी स्कैटर प्लॉट अंक के लिए रंगीन ढाल के साथ मैं 3 डी प्लॉट कैसे बना सकता हूं? नीचे दिया गया उदाहरण देखें, जो 2 डी स्कैटर प्लॉट के लिए काम करता है।रंग ग्रेडिएंट

संपादित करें (क्रिस के लिए धन्यवाद): मैं 3 डी प्लॉट से जो देखने की उम्मीद कर रहा हूं वह 2 डी स्कैटर प्लॉट में लाल से हरे रंग के बिंदुओं का रंग ढाल है। मैं 3 डी स्कैटर प्लॉट में जो देखता हूं वह केवल लाल बिंदु हैं।

समाधान: कुछ कारणों से (मैंने कहीं और कॉपी किए गए ढाल उदाहरण से संबंधित) मैंने xrange को len-1 सेट किया है, जो 3 डी प्लॉट में सबकुछ खराब करता है।

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

की तरह अलग अलग मूल्यों के बीच लेकर, पैमाने चयन कर सकते हैं क्या हो गया है 3 डी स्कैटर प्लॉट? आप इससे क्या देखने की उम्मीद करते हैं और आप वास्तव में क्या देखते हैं? आपसे आपकी कॉल ['Axes3D.scatter'] पर कोड करें (http://matplotlib.sourceforge.net/mpl_toolkits/mplot3d/tutorial.html#scatter-plots) ठीक लगता है। – Chris

+0

जो मैं 3 डी प्लॉट से देखने की उम्मीद कर रहा हूं वह 2 डी स्कैटर प्लॉट में लाल से हरे रंग के बिंदुओं का रंग ढाल है। मैं 3 डी स्कैटर प्लॉट में जो देखता हूं वह केवल लाल बिंदु हैं। –

उत्तर

0

निम्नलिखित कार्य: मैं नहीं समझ सकता कि आपका क्यों नहीं है। आप आरजीबीए फ्लोट्स के अनुक्रम के रूप में रंग या केवल फ्लोट के अनुक्रम के रूप में सेट करने में सक्षम होना चाहिए।

# 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() 

हालांकि, स्कैटर की मदद से, मैं निम्नलिखित देखता हूं, यह संबंधित हो सकता है।

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. 
+1

"cmap = cm" (ax3D.scatter (x, y, z, s = 30, c = col, marker = 'o', cmap = cm) जोड़ना) स्कैटर फ़ंक्शन में मेरे पास रंग ढाल भी है 3 डी स्कैटर प्लॉट। जो मुझे याद आती है वह गहराई प्रतीत होती है, लेकिन मुझे लगता है कि मेरे पास दोनों नहीं हो सकते हैं। –

+0

आपका क्या मतलब है कि आपके पास गहराई नहीं है? – Cenkoloji

15

यहाँ ढाल रंग के साथ 3 डी बिखराव के लिए एक उदाहरण है:

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() 
बेशक

, आप 0 और 1.

+3

'ax.scatter (z, y, z, c = scalarMap.to_rgba (cs))' ax.scatter (x, y, z, c = scalarMap.to_rgba (cs) होना चाहिए) ' – orange

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^