我有一个pandas数据框,它有几列数据和一列编码感兴趣进程的状态(非连续整数)。
我不想将state列作为一条线来绘制,而是想用它来为绘图的背景添加阴影,例如:
数据帧示例:

df = pd.DataFrame(
{
    "y": [x * x / 100 for x in range(10)],
    "state": [0 if x < 5 else 1 for x in range(10)],
})
    y   state
0   0.00    0
1   0.01    0
2   0.04    0
3   0.09    0
4   0.16    0
5   0.25    1
6   0.36    1
7   0.49    1
8   0.64    1
9   0.81    1

所需的绘图(请注意,state作为一条线包含,以获得点,在最后的图片中,我当然会省略它):
python - 基于变量的图的背景形状-LMLPHP

最佳答案

您可以找到state是常量的块,然后使用axvspan用不同的颜色填充这些块:

fig, ax = plt.subplots(1)
ax.set_ylim(0,1)

df[['y']].plot(ax=ax)

x = df.loc[df['state'] != df['state'].shift(1), 'state'].reset_index()
x['next_index'] = x['index'].shift(-1).fillna(df.index.max())

for i in x.index:
    c = 'blue' if (x.at[i, 'state']==1) else 'red'
    xa = x.at[i, 'index']
    xb = x.at[i, 'next_index']
    ax.axvspan(xa, xb, alpha=0.15, color=c)

输出:
python - 基于变量的图的背景形状-LMLPHP

关于python - 基于变量的图的背景形状,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55116187/

10-11 04:11