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

如何在Plotly中将柱状图置于刻度线之间而非刻度线上?

解决Plotly柱状图柱子与标签置于刻度线之间的问题

核心思路是将柱子的x坐标设为区间中点,同时把x轴刻度线放在区间边界,再把区间标签对应到柱子位置。以下是具体实现步骤和代码:

步骤1:准备数据与区间参数

先定义功率区间边界、区间标签,以及每个区间的中点(柱子要放置的位置):

import plotly.express as px

# 区间边界(刻度线的位置)
x_boundaries = [0, 2, 4, 6, 8]
# 区间标签(对应每个柱子的描述)
x_labels = ["0-2kw", "2-4kw", "4-6kw", "6-8kw"]
# 柱子的x坐标:每个区间的中点
x_centers = [(x_boundaries[i] + x_boundaries[i+1])/2 for i in range(len(x_boundaries)-1)]
# 示例数据
y_values = [10, 25, 18, 30]

步骤2:绘制柱状图并配置x轴

用px.bar绘制时指定x为区间中点,然后调整x轴刻度到边界,同时给柱子添加区间标签:

fig = px.bar(x=x_centers, y=y_values, text=x_labels)

# 配置x轴:刻度线在边界,显示边界数值
fig.update_xaxes(
    tickmode="array",
    tickvals=x_boundaries,  # 刻度线位置是区间边界
    ticktext=[str(b) + "kw" for b in x_boundaries],  # 刻度显示文本
    tickson="boundaries",  # 确保刻度对齐边界
    showgrid=False
)

# 调整柱子标签位置(居中在柱子上方)
fig.update_traces(textposition="outside")

# 调整布局,避免标签被截断
fig.update_layout(margin=dict(b=100))

fig.show()

关键说明

  • 之前设置tickson="boundaries"没生效,是因为柱子的x坐标仍在原刻度中心,必须把x值改成区间中点,才能让柱子落在刻度之间。
  • 如果使用子图,只需在update_xaxes中指定row和col参数即可,比如fig.update_xaxes(..., row=1, col=1),子图本身不影响这个逻辑。
  • 若不想在柱子上显示标签,而是想在x轴刻度之间显示区间名,可以用annotations手动添加:
# 给每个区间中点添加x轴下方的标签
for x, label in zip(x_centers, x_labels):
    fig.add_annotation(
        x=x,
        y=-5,  # 调整y值让标签在x轴下方合适位置
        text=label,
        showarrow=False,
        font=dict(size=10)
    )
# 调整x轴范围,避免标签被截断
fig.update_xaxes(range=[min(x_boundaries)-0.5, max(x_boundaries)+0.5])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 13:50:27