2017-06-29 25 views
1

第一部分数据应该是(3,1.5)处的红色点,但不会与其他点不一样。第一个元素不在散点图上绘图

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

回答

1

我不能确定到底为什么你选择了你当前的设置,但问题是该行:

scat=pp.figure(3)

这是以结束您的for循环...因此在第一次迭代基本完成后定义;您的第一个pp.scatter(point[0],point[1],c=color)被否定。将scat=pp.figure(3)移至您的for循环的顶部即可解决问题。

由于您使用的是常规Python列表,我不确定它们是否可以干净地切片。然而,可以使用三种列表解析:

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