Matplotlib条件标记颜色

时间:2018-10-18 15:19:55

标签: python matplotlib plot

我正在尝试使用时间戳vs价格的matplotlib创建一个图,并在同一图上,如果“ B / S”列中的值为B或S,则覆盖一个条件标记(蓝色或红色)。值为“ NaN”。绘制时间和价格很简单,但我似乎无法弄清楚如何放置这些条件标记。我已经尝试过在该网站和其他网站上寻找解决方案,但没有找到与之非常接近的解决方案。

df = 
            timestamp         price   B/S
0       2018-04-24 06:01:02.600 1     NaN
1       2018-04-24 06:02:02.600 1     NaN
2       2018-04-24 06:03:02.600 2     NaN
3       2018-04-24 06:04:02.600 4     B
4       2018-04-24 06:05:02.775 2     NaN
5       2018-04-24 06:06:02.825 3     NaN
6       2018-04-24 06:07:03.050 5     NaN
7       2018-04-24 06:08:03.125 6     S
8       2018-04-24 06:09:03.275 7     NaN
9       2018-04-24 06:10:03.300 4     NaN
10      2018-04-24 06:11:03.300 3     NaN
11      2018-04-24 06:12:03.950 5     B
12      2018-04-24 06:15:04.050 5     NaN

预先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

我不确定您是否可以将它作为一体。但是下面的代码应该可以解决问题。

markers = {"B": {"marker": "o", "color": "b"}, "S": {"marker": "v", "color": "r"}}
for marker in markers:
    plt.scatter(df[df['B/S'] == marker].timestamp,
                df[df['B/S'] == marker].price,
                marker=markers[marker]['marker'],
                color=markers[marker]['color'])

取决于B / S中数据的复杂性。如果有成百上千个不同的值,那么您可能需要一些生成器用于标记+颜色组合。但我想基于标头只有两个值。