如何在Python Plotly的Candlestick蜡烛图上叠加折线图并解决显示异常
导致蜡烛图叠加折线图后显示错乱的核心原因通常是两个数据集的时间轴未对齐、时间格式不统一,或是使用了已弃用的接口触发兼容问题,可以按以下步骤修正:
- 统一将两个数据集的
datetime列转换为标准pandas时间格式,避免Plotly识别字符串时间时出现偏差 - 对齐两个数据集的时间轴,通过外连接合并的方式确保时间点一一对应,避免序列错位
- 将已被官方弃用的
go.Line替换为推荐的go.Scatter接口,指定mode='lines'实现折线效果 - 手动指定x轴类型为日期型,按需隐藏无交易数据的时间间隙,避免x轴出现多余空白
修正后的参考代码如下:
import pandas as pd import plotly.graph_objects as go # 处理蜡烛图原始数据 response = response.json()['values'] ts = pd.DataFrame.from_records(response) # 转换为标准datetime格式 ts['datetime'] = pd.to_datetime(ts['datetime']) # 处理技术指标原始数据 response_ti = response_ti.json()['values'] df_ti = pd.DataFrame.from_records(response_ti) # 转换为标准datetime格式,和蜡烛图时间格式保持一致 df_ti['datetime'] = pd.to_datetime(df_ti['datetime']) # 按时间列外连接合并两个数据集,对齐时间轴 merge_df = pd.merge(ts, df_ti, on='datetime', how='outer') # 绘制蜡烛图 fig = go.Figure(data=[go.Candlestick( x=merge_df['datetime'], open=merge_df['open'], high=merge_df['high'], low=merge_df['low'], close=merge_df['close'], line=dict(width=1) )]) # 叠加折线图,使用go.Scatter替代弃用的go.Line fig.add_trace(go.Scatter( x=merge_df['datetime'], y=merge_df[technical_indicator], mode='lines', name=technical_indicator )) # 可选配置:隐藏无交易数据的时间间隙,避免x轴出现空白段 fig.update_xaxes( type='date', rangebreaks=[dict(values=merge_df[merge_df['open'].isna()]['datetime'])] ) fig.show()
如果调整后仍有错位,可检查两个原始数据集的时间粒度是否一致,比如蜡烛图为日级数据、指标数据为小时级数据的场景下,也会出现匹配错误的问题。
内容的提问来源于stack exchange,提问作者Huzaifa Zahoor
相关产品推荐
相关产品推荐

