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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:24:00