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

如何在plt.imshow中调整单元格宽高比,使Y轴方向单元格高度为宽度的10%

解决Matplotlib imshow单元格宽高比调整问题

我懂你的困扰——之前调figsize只能整体缩放图像,却改不了单元格的宽高比,这是因为imshow默认设置了aspect='equal',强制每个单元格保持正方形。要实现“单元格高度为宽度的10%”的需求,只需要修改aspect参数即可,具体方案如下:

直接修改imshow的aspect参数

你可以在调用imshow时直接指定aspect=0.1(这个数值代表单元格高度与宽度的比值,0.1正好对应高度是宽度的10%),再配合合适的画布尺寸让显示更美观:

import pandas as pd
import matplotlib.pyplot as plt

# 你的原始数据定义
df = pd.DataFrame({'x':[1,2,2,3,3,3],'y':[1,1,2,1,2,3],'z':[3,2,4,5,1,6]})
X = df.to_numpy()

# 设置画布尺寸,这里选宽10高2来适配窄行需求
plt.figure(figsize=(10, 2))
# 指定aspect=0.1,让单元格高度为宽度的10%
plt.imshow(X, aspect=0.1)
plt.colorbar()  # 可选,添加颜色条方便看数值对应关系
plt.show()

另一种方式:通过Axes对象设置宽高比

如果你习惯用面向对象的绘图方式,也可以通过ax.set_aspect()来设置:

import pandas as pd
import matplotlib.pyplot as plt

df = pd.DataFrame({'x':[1,2,2,3,3,3],'y':[1,1,2,1,2,3],'z':[3,2,4,5,1,6]})
X = df.to_numpy()

fig, ax = plt.subplots(figsize=(10, 2))
ax.imshow(X)
# 同样设置宽高比为0.1
ax.set_aspect(0.1)
plt.colorbar(ax=ax)
plt.show()

为什么之前的figsize没用?

figsize只是调整整个画布的大小,但imshow默认的aspect='equal'会强制每个单元格的宽高比保持1:1,所以无论怎么调画布尺寸,单元格始终是正方形。修改aspect参数就能打破这个限制,自定义你需要的宽高比。如果觉得刻度或者文字显示拥挤,可以适当调整figsize的数值来优化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 18:37:38