Matplotlib 2行2列子图如何同时显示全部xticks与xlabels
解决方案
你遇到的问题根源是共享y轴时,matplotlib默认会隐藏非底部行子图的x轴标签,而label_outer()方法会额外隐藏非边缘子图的刻度。要同时保留所有子图的xticks和xlabels,按如下方式修改代码即可:
修改后的完整代码
import matplotlib.pyplot as plt import pandas as pd import numpy as np df = pd.DataFrame({"col1": [1,2], "col2": [3,4], "col3": [5,6], "col4": [7,8], "target": [9,10]}) # 新增constrained_layout参数避免子图、标签相互挤压 f, axs = plt.subplots(nrows = 2, ncols = 2, sharey = True, constrained_layout=True) for k, col in enumerate(df.columns): if col != "target": idx = np.unravel_index(k, (2,2)) axs[idx].scatter(df[col], df.target) axs[idx].set_xlabel(col) # 强制显示当前子图的x轴刻度标签,覆盖共享轴的默认隐藏规则 axs[idx].tick_params(axis='x', labelbottom=True) plt.show()
关键修改说明
- 创建子图时添加
constrained_layout=True参数,自动调整子图间距,避免标签被截断或重叠 - 移除
label_outer()相关代码,避免非边缘子图的刻度被隐藏 - 循环中添加
axs[idx].tick_params(axis='x', labelbottom=True),强制每个子图都显示x轴刻度标签,不受共享轴默认规则限制
内容的提问来源于stack exchange,提问作者Sam OT
相关产品推荐
相关产品推荐

