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

如何在Matplotlib Mosaic中共享坐标轴标签与刻度?

解决Matplotlib Mosaic共享轴及刻度标签显示问题

错误原因

Matplotlib的subplot_mosaic不支持直接传入sharex/sharey参数——这些是subplot专属参数,传入mosaic后会被误解析为图形元素(比如Rectangle)的属性,所以触发AttributeError: 'Rectangle' object has no property 'sharex'。

解决步骤

1. 创建Mosaic网格并获取子图引用

先正常创建mosaic布局,拿到每个子图的对象:

import matplotlib.pyplot as plt

# 定义mosaic布局,示例为2行2列:A B / C D
fig = plt.figure(layout="constrained")
axes = fig.subplot_mosaic([['A', 'B'], ['C', 'D']])

2. 手动设置轴共享

通过子图对象的sharex()/sharey()方法手动绑定共享轴,确保刻度统一:

# 所有子图共享A的y轴,保证y刻度一致
axes['B'].sharey(axes['A'])
axes['C'].sharey(axes['A'])
axes['D'].sharey(axes['A'])

# 所有子图共享C的x轴,保证x刻度一致
axes['A'].sharex(axes['C'])
axes['B'].sharex(axes['C'])
axes['D'].sharex(axes['C'])

3. 控制刻度标签显示

根据需求隐藏不需要的刻度标签:

# 隐藏右侧子图(B、D)的y轴标签,只保留左侧A、C的
axes['B'].tick_params(axis='y', labelleft=False)
axes['D'].tick_params(axis='y', labelleft=False)

# 隐藏顶部子图(A、B)的x轴标签,只保留底部C、D的
axes['A'].tick_params(axis='x', labelbottom=False)
axes['B'].tick_params(axis='x', labelbottom=False)

完整测试代码

import matplotlib.pyplot as plt
import numpy as np

# 创建mosaic布局
fig = plt.figure(layout="constrained")
axes = fig.subplot_mosaic([['A', 'B'], ['C', 'D']])

# 设置轴共享
axes['B'].sharey(axes['A'])
axes['C'].sharey(axes['A'])
axes['D'].sharey(axes['A'])

axes['A'].sharex(axes['C'])
axes['B'].sharex(axes['C'])
axes['D'].sharex(axes['C'])

# 控制刻度标签显示
axes['B'].tick_params(axis='y', labelleft=False)
axes['D'].tick_params(axis='y', labelleft=False)

axes['A'].tick_params(axis='x', labelbottom=False)
axes['B'].tick_params(axis='x', labelbottom=False)

# 测试绘图
x = np.linspace(0, 10, 100)
axes['A'].plot(x, np.sin(x))
axes['B'].plot(x, np.cos(x))
axes['C'].plot(x, np.tan(x[:-10]))
axes['D'].plot(x, np.exp(-x/5))

plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 08:28:23