2014-12-04 3 views
0
#3d dynamic scatterplot 
import numpy as np 
from matplotlib import pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 
import time 

plt.ion() 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
s=0 
a=1 
b=2 
for i in range(0, 10): 
    s=a+b 
    ax.set_xlabel('X axis') 
    ax.set_ylabel('Y axis') 
    ax.set_zlabel('Z axis') 
    x = np.random.rand(5, 3) 
    y = np.random.rand(5, 3) 
    z = np.random.rand(5, 3) 
    #ax.cla()  
    ax.scatter(x[:, 0], y[:, 1], z[:, 2]) 
    plt.draw() 
    time.sleep(1) #make changes more apparent/easy to see 
    a=a+1 
    b=b+2 
    if s>10: 
     break; 

Этот участок генерирует множество точек на каждой итерации. Но в конце всех итераций невозможно отличить точки разных поколений. Так можно по-разному окрасить точки генерации? Также должно быть возможно n число итераций.Изменить цвет 3D-диаграммы рассеяния на каждую итерацию

ответ

1

Добавить список цветов и итерацию через них:

например добавить эти строки в код

colors = ['#8ffe09','r','#0033ff','#003311','#993333','#21c36f','#c46210','#ed3cca','#ffbf00','g','#000000'] # a list of colours 


ax.scatter(x[:, 0], y[:, 1], z[:, 2],color=colors[a-1]) # use the color kwarg 

Ваш код будет:

from matplotlib import pyplot as plt 
from mpl_toolkits.mplot3d import Axes3D 
import time 
colors = ['#8ffe09','r','#0033ff','#003311','#993333','#21c36f','#c46210','#ed3cca','#ffbf00','g','#000000'] 
plt.ion() 
fig = plt.figure() 
ax = fig.add_subplot(111, projection='3d') 
s=0 
a=1 
b=2 
for i in range(0, 10): 
    s=a+b 
    ax.set_xlabel('X axis') 
    ax.set_ylabel('Y axis') 
    ax.set_zlabel('Z axis') 
    x = np.random.rand(5, 3) 
    y = np.random.rand(5, 3) 
    z = np.random.rand(5, 3) 
    #ax.cla()  
    ax.scatter(x[:, 0], y[:, 1], z[:, 2],color=colors[a-1]) 
    plt.draw() 
    time.sleep(1) #make changes more apparent/easy to see 
    a=a+1 
    b=b+2 
    if s>10: 
     break;