【问题标题】:Color different values in a Pandas dataframe a different color on a scatterpot with Matplotlib使用 Matplotlib 在散点图上为 Pandas 数据框中的不同值着色不同的颜色
【发布时间】:2020-10-07 22:12:30
【问题描述】:

我有一个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 轴,Sig 列在 Y 上,但只显示 1 和 -1,其中 1 为蓝色,-1 为红色的。但如果有意义的话,我不希望从散点图中省略 0 行。

我显然可以只做散点图,因此 'plt.scatter(x=df.index, y=df['Sig'])' 但是这当然会在Sig 中绘制所有数字并且没有颜色代码他们。

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

【问题讨论】:

  • 在参数中你可以使用facecolor = ["blue" if s>0 else "red" for s in df["Sig"]]。如果您需要,我们可以在数据正好为 0 时为第三种颜色添加额外的 if/else。
  • facecolor = [{-1: "red", 0: "black", 1: "blue"}[sign] for sign in df["Sig"]]

标签: python pandas matplotlib


【解决方案1】:

您可以像这样对过滤后的数据进行分组:

# 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)

输出:

【讨论】:

    【解决方案2】:

    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"]])
    

    【讨论】:

      猜你喜欢
      • 2021-02-26
      • 2021-12-26
      • 2013-02-26
      • 1970-01-01
      • 1970-01-01
      • 2017-09-14
      • 1970-01-01
      • 1970-01-01
      • 2014-10-01
      相关资源
      最近更新 更多