2013-09-04 5 views
8

Her veri noktası için işaretçi rengi farklı olacak şekilde matplotlib ile bir 2d veri kümesi çizmek istiyorum. Çok renkli çizgilerle ilgili örneği buldum (http://matplotlib.org/examples/pylab_examples/multicolored_line.html). Ancak, bu, işaretçileri olan bir çizgiyi çizerken işe yaramaz.matplotlib - işaret çizgisi boyunca çizgi rengini değiştirin

ben tek tek ile geldi çözüm her noktayı çizer:

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) 

çıkan arsa olması gerektiği gibi gibi görünüyor ama komplo gerçekten yavaş kalkar ve ben oldukça hızlı olması gerekiyor. Çizimi hızlandırmak için akıllı bir numara var mı?

cevap

15

Sana ax.scatter ile bunu başarabilirsiniz inanıyoruz:

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

Dağılım CMAP kullanarak renkleri eşlenir yüzen bir dizi olarak c kabul eder. timeit kullanarak

enter image description here

zaman içinde 10 kat azalma elde (orijinal yöntemi için yaklaşık 1.25 saniye ve burada 76.8 ms)