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

Python Plotly中如何让垂直条形图与x轴刻度对齐?

问题原因

Plotly 中 go.Bar 默认将传入的 x 坐标作为条形的中心位置,且会自动计算条形宽度,不符合左黎曼和要求的「条形左边缘与区间左端点对齐、宽度等于区间步长」的规则,这是出现错位的核心原因。

修正代码

import plotly.graph_objects as go
import numpy as np

fig = go.Figure()

x = np.linspace(0, np.pi, 50)
y = np.sin(x)

fig.add_trace(go.Scatter(x=x, y=y, name='sin(x)', showlegend=True))

a = 0.6
b = 2.0
x_fill = np.linspace(a, b, 50)
y_fill = np.sin(x_fill)

fig.add_trace(go.Scatter(x=x_fill, y=y_fill, fill='tozeroy', line=dict(width=0), showlegend=False))
n = 4 # 矩形数量
dx = (b - a) / n # 每个区间的步长
# 生成n个左端点坐标,步长为dx
x_rect = np.linspace(a, b, n, endpoint=False)
y_rect = np.sin(x_rect)

# 新增width和offset参数,对齐条形
fig.add_trace(go.Bar(x=x_rect, y=y_rect, width=dx, offset=dx/2, showlegend=False))
fig.update_layout(xaxis=dict(tickmode='array', tickvals=[a,b], ticktext=['$a$', '$b$']))

fig.show()

核心修改说明

  • 先计算固定步长 dx,作为每个条形的宽度
  • 用 np.linspace 的 endpoint=False 参数生成准确的左端点坐标,避免边界点错误
  • 给 go.Bar 添加 offset=dx/2 参数,让原本中心对齐的条形向右偏移半个步长,最终实现左边缘与左端点完全对齐

内容的提问来源于stack exchange,提问作者Osvaldo Carvalho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 04:57:01