Plotly express线图 - 获取默认颜色(如何根据字典对象指定的线条进行着色?

问题描述 投票:0回答:1

我有一个多变量时间序列的数据框架,我已经为其创建了一个交互式的Plotly express图。我在一个字典指定的特定位置添加了垂直线,每条线都与一个时间序列相关联,我希望设置线的颜色与相应变量的颜色一致。实质上,在下图中,每条垂直线段都可以识别为Fp1或Fp2中的一条,我希望相应地将其颜色定为红色或黑色。

enter image description here

首先,我绘制数据框,其中X是我的时间序列矩阵,plotly.express导入为px,pandas导入为pd,channel=['Fp1','Fp2']。

df=pd.DataFrame(X,columns=channels)
df['id'] = df.index
df = pd.melt(df, id_vars='id', value_vars=df.columns[:-1])
fig = px.line(df, x='id', y='value', color='variable',labels = {'id':'time (20K~100 sec)', 
'value':'millivolts','variable':'channel'},title='Patient')

随后的计算产生了一个字典HFOs 其中每个键对应的是我的两个通道之一 每个值是一个时间列表,例如:

HFOs={'Fp1':[500,....,10500],'Fp2':[800,...11000]}

然后我创建了我的线条,并将它们添加到图中。

for channel,times in HFOs.items():
    for t in times:        
        fig.add_shape(type='line',yref="y",xref="x",
        x0=t,y0=df['value'].min()*1.2,x1=t,y1=df['value'].max()*1.2,line=dict(color='black', 
        width=.25))
        fig.add_trace(go.Scatter(x=[t],y= 
        [df['value'].max()*1.5],mode='text',showlegend=False))    
fig.show()

这样就形成了上图。我如何修改line=dict(color='black',width=.25)来改变颜色为我想要的?我希望在[500,......,10500]处的垂直线为蓝色,在[800,......11000]处的垂直线为红色。(当然,将来会有更多的通道。)

我试着用 "变量 "代替 "黑色",但结果不出所料,只是得到一个错误信息。我觉得一定有一个非常简单的方法来实现我的目标。

python pandas plotly
1个回答
1
投票

很酷的问题。可能有更好的解决方案,但这是我找到的一个。用下面的代码替换创建垂直线的代码。

# fetch the colors of the traces from the figure. 
colors = [trace.line["color"] for trace in fig.data]

for inx, (channel,times) in enumerate(HFOs.items()):
    for t in times:        
        fig.add_shape(type='line',yref="y",xref="x",
        x0=t,y0=df['value'].min()*1.2,x1=t,y1=df['value'].max()*2,
                      line=dict(color=colors[inx], width=3))
fig.show()

结果图如下 (随机数据,为了提高可见度,竖线变宽了)

enter image description here

获取默认颜色列表的另一种方法是使用:

px.colors.qualitative.Plotly这将产生一个10个十六进制颜色代码的列表。我的理解是,这些颜色将用于前10个系列,然后再次用于轨迹11-20等。

© www.soinside.com 2019 - 2024. All rights reserved.