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

如何用Matplotlib拆分多子图并显示坐标轴标签及设置轴范围?

解决Matplotlib多子图拥挤问题:独立显示每个子图

要把原来紧密贴合的共享轴子图改成独立显示的清晰图表,同时保留轴范围设置,核心思路是放弃多子图布局,为每个图表创建独立的Figure对象,具体实现如下:

关键修改步骤

  1. 取消plt.subplots的多子图创建逻辑,改为循环生成单个图表
  2. 每个图表单独设置尺寸、坐标轴标签
  3. 保留原有的轴范围设置代码,应用到每个独立图表上

代码示例对比

原拥挤布局代码

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y_data = [np.sin(x), np.cos(x), np.tan(x), np.exp(x), np.log(x+1), np.sqrt(x)]

# 原共享x轴+紧密贴合的布局
fig, axes = plt.subplots(6, 1, figsize=(8, 12), sharex=True)
fig.subplots_adjust(hspace=0)

for idx, ax in enumerate(axes):
    ax.plot(x, y_data[idx])
    ax.set_ylim([-2, 2])  # 示例y轴范围,按你的实际设置调整
    ax.set_ylabel(f'Y{idx+1}')

plt.xlabel('X Axis')
plt.show()

修改后的独立图表代码

import matplotlib.pyplot as plt
import numpy as np

x = np.linspace(0, 10, 100)
y_data = [np.sin(x), np.cos(x), np.tan(x), np.exp(x), np.log(x+1), np.sqrt(x)]
# 保留你原来设置的每个子图的y轴范围
y_limits = [(-2, 2), (-1.5, 1.5), (-5, 5), (0, 2000), (0, 2.5), (0, 3)]

# 循环生成独立图表
for idx in range(6):
    # 为每个子图创建独立的Figure和Axes
    fig, ax = plt.subplots(figsize=(8, 4))
    
    # 绘制数据+保留原轴范围
    ax.plot(x, y_data[idx])
    ax.set_ylim(y_limits[idx])
    
    # 每个图表都显示完整的坐标轴标签
    ax.set_xlabel('X Axis')
    ax.set_ylabel(f'Y{idx+1}')
    
    # 自动调整布局,避免标签被截断
    plt.tight_layout()
    plt.show()
    
    # 可选:如果需要保存每个图表
    # plt.savefig(f'chart_{idx+1}.png', dpi=150, bbox_inches='tight')

核心优势

  • 每个图表完全独立,不会出现标签拥挤、重叠的问题
  • 可以单独调整每个图表的尺寸(figsize),适配不同数据的显示需求
  • 完整保留了你原来设置的y轴范围,图表信息和原逻辑一致
  • 用plt.tight_layout()自动优化内部元素间距,避免标签被边缘截断

内容的提问来源于stack exchange,提问作者user1821998

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:25:18