Plotly子图X轴刻度缺失问题:如何添加小时级刻度?
解决Plotly子图小时级X轴刻度不显示问题
问题原因
你用make_subplots创建7行子图并开启shared_xaxes=True后,底部的X轴对应的是第7个子图的X轴(编号xaxis7),而非默认的xaxis,所以直接修改xaxis不会生效。另外你代码里的dtick=23会导致每23小时才显示一个刻度,这也是错误的。
解决方案
以下两种方法都可以实现小时级刻度显示:
方法一:用update_xaxes(推荐,更直观)
因为开启了X轴共享,只需修改底部子图的X轴,所有子图的X轴会同步更新:
import numpy as np # 假设你已经创建好fig并添加了数据 fig.update_xaxes( tickmode='array', tickvals=np.arange(0, 24, 1), # 包含0到23所有小时刻度值 ticktext=[f"{i}h" for i in np.arange(0, 24, 1)], # 刻度显示文本,比如"0h"、"1h" row=7, col=1 # 指定修改第7行第1列的X轴(底部的X轴) )
如果想直接统一设置所有子图的X轴,也可以去掉row和col参数。
方法二:用update_layout指定xaxis7
直接在update_layout里针对xaxis7设置刻度:
import numpy as np fig.update_layout( barmode='group', xaxis7=dict( tickmode='array', tickvals=np.arange(0, 24, 1), ticktext=[f"{i}h" for i in np.arange(0, 24, 1)] ) )
关键注意事项
- 用
tickmode='array'配合tickvals和ticktext可以精确控制每个刻度的位置和显示内容,比linear模式更适合这种自定义小时刻度的场景 - 刻度值要覆盖0到23,所以用
np.arange(0,24,1)才能包含23这个小时数 - 因为开启了
shared_xaxes=True,修改任意一个子图的X轴都会同步到所有子图,优先修改底部的X轴更符合视觉逻辑
内容的提问来源于stack exchange,提问作者juerg
相关产品推荐
相关产品推荐

