Python 使用Matplotlib为数据帧中的不同值添加不同颜色的散点

Python 使用Matplotlib为数据帧中的不同值添加不同颜色的散点,python,pandas,matplotlib,Python,Pandas,Matplotlib,我有这样一个df: Date Sig 2020-06-16 09:00:00 1 2020-06-16 13:00:00 0 2020-06-16 17:00:00 -1 2020-06-16 21:00:00 -1 2020-06-17 01:00:00 0 2020-06-17 05:00:00 1 2020-06-17 09:00:00 1 2020-06-17 13:00:00 0 2020-06-17 17

我有这样一个
df

Date                   Sig
2020-06-16 09:00:00    1
2020-06-16 13:00:00    0
2020-06-16 17:00:00   -1
2020-06-16 21:00:00   -1
2020-06-17 01:00:00    0
2020-06-17 05:00:00    1
2020-06-17 09:00:00    1
2020-06-17 13:00:00    0
2020-06-17 17:00:00    0
2020-06-17 21:00:00    -1
我试图在Matplotlib中做一个简单的散点图,索引为X轴,Y轴上的
Sig
列,但只显示1s和-1s,其中1个为蓝色,1个为红色。但我不希望从散点图中省略0行,如果这有意义的话

很明显,我可以做散点图,即“plt.scatter(x=df.index,y=df['Sig']),但这当然会在
Sig
中绘制所有数字,并且不会对它们进行颜色编码


任何帮助都将不胜感激。干杯

您可以对过滤后的数据进行分组,如下所示:

# datetime data type is recommended
df['Date'] = pd.to_datetime(df['Date'])

colors = ['r','b']
fig, ax = plt.subplots()
for c, (k,d) in zip(colors, df[df['Sig']!=0].groupby('Sig')):
    d.plot.scatter(x='Date',y='Sig',label=k, ax=ax, c=c)
输出:


您可以对过滤后的数据执行groupby操作,如下所示:

# datetime data type is recommended
df['Date'] = pd.to_datetime(df['Date'])

colors = ['r','b']
fig, ax = plt.subplots()
for c, (k,d) in zip(colors, df[df['Sig']!=0].groupby('Sig')):
    d.plot.scatter(x='Date',y='Sig',label=k, ax=ax, c=c)
输出:


plt.scatter
支持多种颜色,因此您实际上可以为每个点指定一种独立的颜色

在这里,我们将简单地拥有一个字典,其中有三个选项由您的数据符号决定:

colors = {-1: "red", 0: "black", +1: "blue"}
plt.scatter(x=df.index, y=df["Sig"], color=[colors[sign] for sign in df["Sig"]])

plt.scatter
支持多种颜色,因此实际上可以为每个点指定独立的颜色

在这里,我们将简单地拥有一个字典,其中有三个选项由您的数据符号决定:

colors = {-1: "red", 0: "black", +1: "blue"}
plt.scatter(x=df.index, y=df["Sig"], color=[colors[sign] for sign in df["Sig"]])

在参数中,可以使用类似于
facecolor=[“blue”if s>0,或者“red”for s In df[“Sig”]]
。如果需要,当数据正好为0时,我们可以为第三种颜色添加一个额外的if/else。即
facecolor=[{-1:“红色”,0:“黑色”,1:“蓝色”}[sign]用于登录df[“Sig”]]
。在参数中,可以使用类似于
facecolor=[“blue”if s>0或“red”for s in df[“Sig”]
。如果需要,当数据正好为0时,我们可以为第三种颜色添加额外的if/else。即
facecolor=[{-1:“红色”,0:“黑色”,1:“蓝色”}[sign]用于登录df[“Sig”]]