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

如何用AxesGrid绘制不同x/y范围的正方形颜色子图?

解决AxesGrid中正方形子图+矩形数据点的问题

没问题,完全可以实现你的需求!关键在于两个核心设置:一是让AxesGrid里的子图保持正方形形状,二是给imshow()配置合适的参数,让数据点根据你的x/y轴实际范围显示成矩形。

核心调整要点

  • 给AxesGrid传入axes_kwargs参数,强制子图为正方形;
  • 针对imshow()计算并设置匹配x/y范围比例的aspect值,让数据点呈现出符合实际维度的矩形;
  • 简化原代码中重复创建色条的冗余逻辑,确保每行子图对应一个色条。

修改后的完整代码

import matplotlib.pyplot as plt
from mpl_toolkits.axes_grid1 import AxesGrid
import numpy as np

# 你的实际数据轴范围
x_range = [0, 360]
y_range = [0, 3.5]
# 计算aspect比例:y轴范围 / x轴范围,让数据点匹配实际维度比例
aspect_ratio = (y_range[1] - y_range[0]) / (x_range[1] - x_range[0])

fig = plt.figure(figsize=(10, 6))
nrow = 3
ncol_per_row = 3

for j in range(nrow):
    # 初始化AxesGrid,强制子图为正方形
    grid = AxesGrid(fig, (j+1)*100 + 10 + 1,
                    nrows_ncols=(1, ncol_per_row),
                    axes_pad=0.05,
                    cbar_mode='single',
                    add_all=True,
                    cbar_location='right',
                    cbar_pad=0.1,
                    axes_kwargs={'aspect': 'equal'}  # 固定子图为正方形
                    )
    
    for ax in grid:
        ax.set_axis_off()
        # 模拟你的数据维度(示例为8行y方向、16列x方向)
        data = np.random.random((8, 16))
        # 用计算好的比例让数据点显示为矩形
        im = ax.imshow(data, vmin=0, vmax=1, aspect=aspect_ratio)
    
    # 为当前行设置统一色条
    cbar = grid.cbar_axes[0].colorbar(im)
    cbar.ax.set_yticks(np.arange(0, 1.1, 0.5))
    cbar.ax.set_yticklabels(['low', 'medium', 'high'])

plt.tight_layout()
plt.show()

细节说明

  1. 正方形子图实现:通过axes_kwargs={'aspect': 'equal'}让每个子图的坐标轴比例一致,确保子图呈现正方形外观;
  2. 矩形数据点实现:计算的aspect_ratio是y轴范围与x轴范围的比值,传给imshow()后,数据点会按照你实际的x/y维度比例显示,避免了原代码中子图狭长的问题;
  3. 色条优化:把色条创建逻辑移到每行子图循环外,确保每行仅生成一个色条,解决了原代码中重复创建色条的冗余问题。

这样调整后,就能得到每行带单独色条、子图为正方形但数据点匹配实际x/y范围的理想效果啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:03:09