Python中使用matplotlib实现跨两个子图单元格合并子图的方法
实现方案
你需要的跨单元格合并子图布局可通过matplotlib内置的subplot2grid接口快速实现,以下是完整可运行的示例代码:
import matplotlib.pyplot as plt import numpy as np # 生成测试数据 x = np.linspace(0, 2*np.pi, 100) y = np.sin(x) fig = plt.figure(figsize=(10, 6)) # 定义2行2列的网格布局 # 第1行第1列位置的子图,不跨行列 ax1 = plt.subplot2grid(shape=(2, 2), loc=(0, 0)) ax1.plot(x, y, 'tab:blue') ax1.set_title('Axis [0, 0]') # 第2行第1列位置的子图,不跨行列 ax2 = plt.subplot2grid(shape=(2, 2), loc=(1, 0)) ax2.plot(x, -y, 'tab:green') ax2.set_title('Axis [1, 0]') # 第1行第2列位置的子图,跨2行1列 ax3 = plt.subplot2grid(shape=(2, 2), loc=(0, 1), rowspan=2) ax3.plot(x, y**2, 'tab:red') ax3.set_title('Axis [0, 1] (rowspan=2)') # 统一设置坐标轴标签 for ax in [ax1, ax2, ax3]: ax.set(xlabel='x-label', ylabel='y-label') # 隐藏顶部子图的x轴标签、右侧子图的y轴标签,和官方示例效果一致 ax1.label_outer() ax2.label_outer() ax3.label_outer() plt.tight_layout() plt.show()
参数说明:
subplot2grid的shape参数指定整个画布的网格行列数loc参数指定子图左上角在网格中的坐标(行号在前,列号在后)rowspan和colspan参数分别指定子图跨行、跨列的数量,默认都为1
如果需要更灵活的网格比例调整,也可以使用matplotlib.gridspec.GridSpec接口实现,逻辑和上述参数基本一致。
内容的提问来源于stack exchange,提问作者Martin Kunze
相关产品推荐
相关产品推荐

