6

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

这是我迄今为止的尝试。这里 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 的长度。他们都是一样的。有人可以帮我吗?谢谢。

4

1 回答 1

8

您正在timeDiffInt使用该列表中的项目索引您的列表,如果这些整数大于列表的长度,它将显示此错误。

你想让你的散点图包含两种颜色吗?一种颜色代表 0 值,另一种颜色代表其他值?

您可以使用 Numpy 将列表更改为零和一:

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)
于 2013-10-11T06:46:22.747 回答