Matplotlib - 为某些数据点绘制不同颜色的图

时间:2013-10-11 06:19:29

标签: python matplotlib scatter

我的问题类似于this question。我正在绘制纬度与经度。如果变量中的值为0,我希望使用不同的颜色标记lat / long值。我该怎么做?

到目前为止,这是我的尝试。这里x保持纬度,y保持经度。 timeDiff是一个包含浮点值的列表,如果值为0.0,我希望该颜色不同。

因为,matplotlib抱怨它不能使用浮点数,我首先将值转换为int。

timeDiffInt=[int(i) for i in timeDiff]

然后我使用了列表理解:

plt.scatter(x,y,c=[timeDiffInt[a] for a in timeDiffInt],marker='<')

但是我收到了这个错误:

IndexError: list index out of range

所以我检查了x,y和timeDiffInt的长度。所有这些都是一样的。有人可以帮我这个吗?感谢。

1 个答案:

答案 0 :(得分:8)

您正在使用该列表中的项目索引timeDiffInt列表,如果这些列表的大小超过列表的长度,则会显示此错误。

您希望散点图包含两种颜色吗?值为0的一种颜色和其他值的另一种颜色?

您可以使用Numpy将列表更改为0和1:

timeDiffInt = np.where(np.array(timeDiffInt) == 0, 0, 1)
然后,

Scatter将为这两个值使用不同的颜色。

fig, ax = plt.subplots(figsize=(5,5))

ax.scatter(x,y,c=timeDiffInt, s=150, marker='<', edgecolor='none')

enter image description here

编辑:

您可以自己制作颜色表来为特定值创建颜色:

fig, ax = plt.subplots(figsize=(5,5))

colors = ['red', 'blue']
levels = [0, 1]

cmap, norm = mpl.colors.from_levels_and_colors(levels=levels, colors=colors, extend='max')

ax.scatter(x,y,c=timeDiffInt, s=150, marker='<', edgecolor='none', cmap=cmap, norm=norm)