如何为3行1列子图中前两个数据图设置共享X轴?
解决方法
要实现前两行数据图共享X轴、第三行图像图独立X轴的需求,有两种简单可行的方式:
方法一:创建子图时直接指定独立X轴
在make_subplots的specs参数中,给第三行的子图配置独立的X轴标识,同时开启全局X轴共享:
fig = make_subplots(rows=3, cols=1, vertical_spacing=0.05, specs=[ [{"secondary_y": False}], [{"secondary_y": True}], [{"secondary_y": False, "type": "image", "xaxis": "x3"}] # 为第三行指定独立X轴x3 ], subplot_titles=(plot_title_1stsubplot, plot_title_2ndsubplot), row_heights=[0.7,0.15,0.15], shared_xaxes=True, # 开启全局X轴共享,第三行因指定独立轴不受影响 )
原理:shared_xaxes=True会让所有未指定独立轴的子图共享X轴,给第三行子图加上"xaxis": "x3",就能强制它使用独立的X轴,避开共享规则。
方法二:创建子图后手动配置X轴匹配
保持原有shared_xaxes=False,在子图创建完成后,手动指定第二行X轴匹配第一行,第三行不匹配:
fig = make_subplots(rows=3, cols=1, vertical_spacing=0.05, specs=[[{"secondary_y": False}],[{"secondary_y": True}],[{"secondary_y": False,"type": "image"}]], subplot_titles=(plot_title_1stsubplot,plot_title_2ndsubplot), row_heights=[0.7,0.15,0.15], shared_xaxes=False, ) # 让第二行X轴匹配第一行,实现共享 fig.update_xaxes(matches='x', row=2, col=1) # 确保第三行X轴独立,不参与共享 fig.update_xaxes(matches=None, row=3, col=1)
原理:update_xaxes的matches参数可以指定当前X轴要匹配的目标轴,'x'对应第一行的X轴,None则表示独立。
内容的提问来源于stack exchange,提问作者roudan
相关产品推荐
相关产品推荐

