2013-09-04 9 views
8

के साथ मार्कर रंग बदलें मैं matplotlib के साथ 2 डी डेटा सेट प्लॉट करना चाहता हूं जैसे प्रत्येक डेटा बिंदु के लिए मार्कर रंग अलग है। मुझे मल्टीकोरर लाइनों पर उदाहरण मिला (http://matplotlib.org/examples/pylab_examples/multicolored_line.html)। हालांकि, यह मार्करों के साथ एक लाइन की साजिश करते समय काम नहीं करता है।matplotlib - प्लॉट लाइन

समाधान मैं व्यक्तिगत रूप से के साथ आया था हर बिंदु भूखंडों:

import matplotlib.cm as cm 
import matplotlib.pyplot as plt 
import numpy as np 

# The data 
x = np.linspace(0, 10, 1000) 
y = np.sin(2 * np.pi * x) 

# The colormap 
cmap = cm.jet 

# Create figure and axes 
fig = plt.figure(1) 
fig.clf() 
ax = fig.add_subplot(1, 1, 1) 

# Plot every single point with different color 
for i in range(len(x)): 
    c = cmap(int(np.rint(x[i]/x.max() * 255))) 
    ax.plot(x[i], y[i], 'o', mfc=c, mec=c) 
    ax.set_xlim([x[0], x[-1]]) 
    ax.set_ylim([-1.1, 1.1]) 
    ax.set_xlabel('x') 
    ax.set_ylabel('y') 

plt.draw() 
plt.show() 

# Save the figure 
fig.savefig('changing_marker_color.png', dpi=80) 

जिसके परिणामस्वरूप साजिश एकदम सही ढंग से की तरह दिखता है, लेकिन वास्तव में अंकन धीमा हो जाता है और मैं इसे काफी तेजी से की जरूरत है। साजिश को तेज करने के लिए कोई चालाक चाल है?

उत्तर

15

मेरा मानना ​​है कि आप ax.scatter साथ इस लक्ष्य को हासिल कर सकते हैं:

# The data 
x = np.linspace(0, 10, 1000) 
y = np.sin(2 * np.pi * x) 

# The colormap 
cmap = cm.jet 

# Create figure and axes 
fig = plt.figure(1) 
fig.clf() 
ax = fig.add_subplot(1, 1, 1) 

c = np.linspace(0, 10, 1000) 
ax.scatter(x, y, c=c, cmap=cmap) 

स्कैटर तैरता के अनुक्रम जो CMAP का उपयोग कर रंग के मैप किया जाएगा के रूप में सी स्वीकार करता है।

enter image description here

timeit का उपयोग करते हुए मैं समय में एक 10 गुना कमी मिल (मूल विधि के लिए 1.25 के बारे में सेकेंड और 76.8 एमएस यहाँ)

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