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

