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

Matplotlib紧凑布局:左侧图像+右侧同列色条及跨列标题实现

Matplotlib 实现左侧图像+右侧同列紧凑色条布局及色条跨列标题

优化紧凑布局

你当前代码通过创建多余子图框放置色条,导致布局松散。推荐用GridSpec精准划分画布,直接为色条分配独立轴,彻底消除多余绘图框:

  • 用GridSpec将画布划分为3行2列,左侧列合并为一个大区域放图像,右侧垂直分为三个小区域专门放色条。
  • 通过width_ratios参数控制左右区域宽度比例,让布局更紧凑贴合需求。

添加色条跨列标题

直接用fig.text()定位到右侧色条列的顶部中心,添加统一标题即可,无需额外创建子图。

完整可运行代码

import matplotlib.pyplot as plt
import numpy as np
from matplotlib.gridspec import GridSpec

# 生成示例数据
data1 = np.random.rand(10, 10)
data2 = np.random.rand(10, 10)
data3 = np.random.rand(10, 10)

# 创建画布并划分布局:3行2列,左侧占3行,右侧分3行,左右宽度比例4:1
fig = plt.figure(figsize=(10, 6))
gs = GridSpec(3, 2, width_ratios=[4, 1])

# 左侧图像轴
ax_img = fig.add_subplot(gs[:, 0])
# 右侧三个色条轴
ax_cbar1 = fig.add_subplot(gs[0, 1])
ax_cbar2 = fig.add_subplot(gs[1, 1])
ax_cbar3 = fig.add_subplot(gs[2, 1])

# 绘制图像(此处按原逻辑叠加展示数据,可根据需求修改为单图或多图)
im1 = ax_img.imshow(data1, aspect='auto', cmap='viridis')
im2 = ax_img.imshow(data2, aspect='auto', cmap='viridis', alpha=0.5)
im3 = ax_img.imshow(data3, aspect='auto', cmap='viridis', alpha=0.3)

# 将色条绑定到对应轴,实现紧密排列
plt.colorbar(im1, cax=ax_cbar1)
plt.colorbar(im2, cax=ax_cbar2)
plt.colorbar(im3, cax=ax_cbar3)

# 添加色条列的统一标题
fig.text(0.85, 0.95, '带宽 (MHz)', ha='center', va='top', fontsize=12, fontweight='bold')

# 微调布局,给标题留出空间
plt.tight_layout()
plt.subplots_adjust(top=0.9)
plt.show()

额外说明

  • 若左侧需要展示3个独立图像,只需将左侧区域也划分为3行,创建3个图像轴与右侧色条轴一一对应即可。
  • 可通过调整width_ratios数值,灵活控制图像区域和色条区域的宽度占比。
  • 如果不需要色条的刻度标签,可通过ax_cbar1.set_yticklabels([])隐藏,进一步优化紧凑度。

内容的提问来源于stack exchange,提问作者Chris Ze Third

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 00:34:59