加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python-基于变量的情节的背景形状

发布时间:2020-12-17 17:39:28 所属栏目:Python 来源:网络整理
导读:我有一个Pandas Dataframe,它有几列数据和一列,该列编码感兴趣的过程的状态(非连续整数). 与其将状态列绘制为一条线,我不希望使用它为绘制的背景添加阴影,例如如下: 示例数据框: df = pd.DataFrame({ "y": [x * x / 100 for x in range(10)],"state": [0 i

我有一个Pandas Dataframe,它有几列数据和一列,该列编码感兴趣的过程的状态(非连续整数).

与其将状态列绘制为一条线,我不希望使用它为绘制的背景添加阴影,例如如下:

示例数据框:

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

所需的绘图(请注意,状态包括在一条线中以使点穿过,在最后一张图中,我当然会忽略它):

enter image description here

最佳答案
您可以找到状态为常数的块,然后使用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)

输出:

output

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读