Plotly Express多折线图中设置指定折线宽度的方法
Plotly.express 单独指定Close折线宽度的实现方法
失效原因
你之前编写的for_each_trace条件判断逻辑本身没有语法错误,失效是因为代码执行顺序问题:如果将单条trace的自定义配置放在fig.update_traces()这类全局trace配置之前,全局配置会覆盖单条trace的自定义参数,导致宽度修改不生效。
修正方案
将针对Close折线的宽度调整代码,移动到所有全局trace配置、布局配置、坐标轴配置之后,fig.show()调用之前即可。不需要在单条配置里重复指定Close的颜色,你预设的color_discrete_sequence已经为Close分配了黑色,重复定义color反而可能导致配色异常。
修正后的完整可运行代码如下:
import plotly.express as px ticker = 'TSLA' colours = ['steelblue', 'tan', 'black', 'red', 'green'] fig = px.line( df.tail(150), x=df.tail(150).index, y=['middle_band', 'SMA_200', 'upper_band', 'lower_band','Close'], title=f'{ticker}', color_discrete_sequence=colours, width=800, height=600 ) # 全局折线统一配置 fig.update_traces(textfont_size=12, showlegend=True) # 图例、布局配置 fig.update_layout(legend=dict( yanchor="top", y=0.9, xanchor="left", x=0.02 )) # 坐标轴配置 fig.update_xaxes(title_text='Price evolution over time', title_font={"size": 16}) fig.update_yaxes(title_text='Price', tickprefix="$") # 单独调整Close折线宽度,放在所有全局配置之后避免被覆盖 fig.for_each_trace( lambda trace: trace.update(line=dict(width=4)) if trace.name == "Close" else () ) fig.show()
效果说明
- 上述代码将Close折线宽度设置为4,其余折线保持Plotly默认的2px宽度,视觉上会明显突出Close价格线,你可以根据实际需求调整width的数值
- 其余折线如果需要单独定制样式,也可以通过相同的
for_each_trace逻辑,匹配trace.name对应修改即可
原始运行效果参考:
内容的提问来源于stack exchange,提问作者Zen4ttitude
相关产品推荐
相关产品推荐

