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
相关产品推荐
相关产品推荐

