我的问题类似于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的长度。所有这些都是一样的。有人可以帮我这个吗?感谢。
答案 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')
您可以自己制作颜色表来为特定值创建颜色:
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)