第一个元素没有在散点图上绘图

时间:2017-06-29 17:40:50

标签: python matplotlib scatter

第一段数据应该是(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 个答案:

答案 0 :(得分: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()