You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Plotly实现叠加价值区条形图的蜡烛图子图坐标轴配置

问题原因

效果不对核心是3个配置错误:

  • 水平价值区域条形图和K线共用了同一个X轴,条形默认从子图左侧X=0位置向右延伸,挤占K线显示空间,和示例「条形从子图右边缘向左延伸」的逻辑完全相反
  • 给col=2位置的K线额外加了yaxis="y2"参数,和shared_yaxes=True的共享Y轴逻辑冲突,会导致Y轴刻度错位
  • 没有为水平条形图单独配置叠加的反向X轴,无法实现条形右对齐、不干扰K线布局的效果
修改方案

按以下点调整即可匹配示例效果:

  1. 删除初始化阶段错误的overlaying配置,保留共享Y轴、0水平间距的基础设置
  2. 给每个子图的水平条形图单独绑定一个叠加X轴,配置为锚定对应子图Y轴、叠加在原X轴上、坐标轴反转,同时隐藏这个X轴的刻度、标签、网格线
  3. 删除第二个K线trace里多余的yaxis="y2"参数
  4. 给条形图X轴设置合理范围,让最长的条形不会覆盖左侧K线区域
  5. 隐藏K线自带的滑动条等冗余元素
修正后完整代码
from plotly.subplots import make_subplots
import plotly.graph_objects as go

# 初始化1行2列子图,共享Y轴,子图间距为0
fig = make_subplots(rows=1, cols=2, shared_yaxes=True, horizontal_spacing=0)

# -------------------------- 第一个子图(col=1,data_2) --------------------------
dateStr_2 = chart_data_2.index.strftime("%d-%m-%Y %H:%M:%S")
# K线图
fig.add_trace(
    go.Candlestick(
        x=dateStr_2,
        open=chart_data_2['open'],
        high=chart_data_2['high'],
        low=chart_data_2['low'],
        close=chart_data_2['close'],
        name='K线'
    ),
    row=1, col=1
)
# 价值区域水平条形图,绑定独立叠加X轴
fig.add_trace(
    go.Bar(
        x=volume_profile_2.values, 
        y=volume_profile_2.index,
        orientation='h',
        marker_color='rgba(0,0,255,0.25)',
        xaxis='x3',
        showlegend=False
    ),
    row=1, col=1
)
# 参考线
fig.add_hline(y=poc_price_2, annotation_text="POC", annotation_position="bottom right",
              line_width=1, line_color="red", row=1, col=1)
fig.add_hline(y=VAH_2+0.5, annotation_text="VAH", annotation_position="top right",
              line_width=2, line_dash="dash", line_color="goldenrod", row=1, col=1)
fig.add_hline(y=VAL_2-0.5, annotation_text="VAL", annotation_position="bottom right",
              line_width=2, line_dash="dash", line_color="goldenrod", row=1, col=1)

# -------------------------- 第二个子图(col=2,data_1) --------------------------
dateStr_1 = chart_data_1.index.strftime("%d-%m-%Y %H:%M:%S")
# K线图,删除多余的yaxis参数
fig.add_trace(
    go.Candlestick(
        x=dateStr_1,
        open=chart_data_1['open'],
        high=chart_data_1['high'],
        low=chart_data_1['low'],
        close=chart_data_1['close'],
        name='K线'
    ),
    row=1, col=2
)
# 价值区域水平条形图,绑定独立叠加X轴
fig.add_trace(
    go.Bar(
        x=volume_profile_1.values, 
        y=volume_profile_1.index,
        orientation='h',
        marker_color='rgba(0,0,255,0.25)',
        xaxis='x4',
        showlegend=False
    ),
    row=1, col=2
)
# 参考线
fig.add_hline(y=poc_price_1, annotation_text="POC", annotation_position="bottom right",
              line_width=1, line_color="red", row=1, col=2)
fig.add_hline(y=VAH_1+0.5, annotation_text="VAH", annotation_position="top right",
              line_width=2, line_dash="dash", line_color="goldenrod", row=1, col=2)
fig.add_hline(y=VAL_1-0.5, annotation_text="VAL", annotation_position="bottom right",
              line_width=2, line_dash="dash", line_color="goldenrod", row=1, col=2)

# -------------------------- 全局布局配置 --------------------------
fig.update_layout(
    height=600,
    title_text="叠加价值区域的K线对比图",
    # 第一个子图K线X轴
    xaxis=dict(
        rangeslider=dict(visible=False),
        side='bottom'
    ),
    # 第二个子图K线X轴
    xaxis2=dict(
        rangeslider=dict(visible=False),
        side='bottom'
    ),
    # 第一个子图条形图专用X轴:反转实现右对齐
    xaxis3=dict(
        anchor='y',
        overlaying='x',
        autorange='reversed',
        showgrid=False,
        zeroline=False,
        showticklabels=False,
        range=[max(volume_profile_2.values)*1.1, 0]
    ),
    # 第二个子图条形图专用X轴:反转实现右对齐
    xaxis4=dict(
        anchor='y2',
        overlaying='x2',
        autorange='reversed',
        showgrid=False,
        zeroline=False,
        showticklabels=False,
        range=[max(volume_profile_1.values)*1.1, 0]
    )
)

fig.show()
可调参数说明
  • 条形宽度:修改xaxis3/xaxis4里range的第一个系数,比如改成max(volume_profile_2.values)*1.5条形会变窄,改成*0.8条形会变长
  • 条形透明度:直接修改marker_color中rgba的第四个值,范围0-1,数值越小透明度越高
  • 图例显示:如果不需要图例,在update_layout里加showlegend=False即可

内容的提问来源于stack exchange,提问作者Pratik Ghodke

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 22:33:25