2017-06-29 1 views
1

Le premier élément de données doit être un point rouge à (3,1.5) mais il ne trace pas, contrairement au reste des points.Premier élément ne pas tracer sur le nuage de points

data=[[3,1.5,1], 
 
     [2,1,0], 
 
     [4,1.5,1], 
 
     [3,1,0], 
 
     [3.5,.5,1], 
 
     [2,.5,0], 
 
     [5.5,1,1], 
 
     [1,1,0]] 
 
#Data used, only the (3,1.5) part won't graph 
 
#Loop to plot data 
 
for i in range(len(data)): 
 
    point=data[i] 
 
    color="r" 
 
    if point[2]==0: 
 
     color="b" 
 
    pp.axis([0,6,0,6]) 
 
    pp.grid() 
 
    pp.scatter(point[0],point[1],c=color) 
 
    scat=pp.figure(3) 
 
scat.show()

Répondre

1

Je ne suis pas sûr de la raison pour laquelle vous avez choisi votre configuration actuelle, mais la question est la ligne:

scat=pp.figure(3)

Cela vient à la fin de votre boucle for ... est donc définie après la première itération a été complétée; votre premier pp.scatter(point[0],point[1],c=color) est annulé. Déplacer scat=pp.figure(3) vers le haut de votre boucle for résout le problème.

Étant donné que vous utilisez des listes Python régulières, je ne suis pas sûr qu'elles puissent être découpées correctement. Cependant, trois compréhensions peuvent être utilisées:

import matplotlib.pyplot as plt 

data=[[3, 1.5, 1], 
     [2,1,0], 
     [4,1.5,1], 
     [3,1,0], 
     [3.5,.5,1], 
     [2,.5,0], 
     [5.5,1,1], 
     [1,1,0]] 

x_data = [item[0] for item in data] 
y_data = [item[1] for item in data] 
color = ['r' if item[2] else 'b' for item in data] 

plt.axis([0,6,0,6]) 
plt.grid() 
plt.scatter(x_data, y_data, color=color) 
plt.show()