我有一个多元时间序列的数据框,为此我创建了一个交互式 plotly express plot。我在字典指定的特定位置添加垂直线,每条线都与一个时间序列相关联,并希望将线颜色设置为与相应变量的颜色一致。本质上,在下图中,每个垂直段都可以用 Fp1 或 Fp2 之一标识,我想相应地将其着色为红色或黑色:首先我绘制数据框,其中 X 是我的时间序列矩阵,plotly.express 已导入为 px,pandas 导入为 pd,channels=['Fp1','Fp2']:df=pd.DataFrame(X,columns=channels)df['id'] = df.indexdf = 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] 是红色。(当然,以后会有更多的渠道。)我尝试用“变量”替换“黑色”,但这并不奇怪,只是导致出现错误消息。我觉得必须有一种非常简单的方法来实现我的目标。
1 回答

繁星coding
TA贡献1797条经验 获得超4个赞
很酷的问题。可能有更好的解决方案,但这是我找到的解决方案。用以下代码替换创建垂直线的代码:
# 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()
结果图如下所示(随机数据,使垂直线更宽以提高可见性):
获取默认颜色列表的另一种方法是使用
px.colors.qualitative.Plotly
,它会生成一个包含 10 个十六进制颜色代码的列表。我的理解是这些颜色将用于前 10 个系列,然后再次用于轨迹 11-20 等。
添加回答
举报
0/150
提交
取消