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

使用imshow绘制嵌套数组热图时最终图像过小比例失调问题求助

问题原因分析
  • matplotlib.pyplot.subplots() 默认创建的画布尺寸仅为6×4英寸左右,当数据行列数量差距较大(如你的原子距离数据行列比约1:3)时,默认尺寸下热图会被强制压缩,出现比例失调问题。
  • imshow 默认aspect参数为equal,要求每个像素显示为正方形,30列的宽度要匹配9行的高度时,整体热图会被拉得非常扁,视觉上尺寸极小,看不清细节。
  • 未显式设置保存/显示的分辨率,也会导致热图导出后模糊、无法识别颜色分布。
修改后可直接运行的代码
import matplotlib.pyplot as plt
import numpy as np

# 示例数据,可替换为你的原始数据集
array1 = np.random.randint(20, size=30)
array2 = np.random.randint(20, size=30)
array3 = np.random.randint(20, size=30)
array4 = np.random.randint(20, size=30)
array5 = np.random.randint(20, size=30)
array6 = np.random.randint(20, size=30)
array7 = np.random.randint(20, size=30)
array8 = np.random.randint(20, size=30)
array9 = np.random.randint(20, size=30)
arrayOfArrays = np.array([array1, array2, array3, array4, array5, array6, array7, array8, array9])

# 核心修改1:根据数据行列比例动态设置画布尺寸,列数多就放大宽度、行数少适当缩小高度
n_rows, n_cols = arrayOfArrays.shape
fig_width = n_cols * 0.4  # 缩放系数可根据自己的显示需求调整
fig_height = n_rows * 0.5
fig, ax = plt.subplots(figsize=(fig_width, fig_height))

# 核心修改2:设置aspect适配画布,interpolation用nearest保证单元格边界清晰
im = ax.imshow(arrayOfArrays, origin='upper', aspect='auto', interpolation='nearest')

tick_interval = 1
ax.set_yticks(np.arange(n_rows)[::tick_interval])
ax.set_xticks(np.arange(n_cols)[::tick_interval])
# 可选:x轴标签旋转45度避免重叠
ax.tick_params(axis='x', rotation=45)

# 颜色条调整shrink参数适配画布高度
cbar = fig.colorbar(im, shrink=0.8)

# 保存时设置高dpi保证清晰度,bbox_inches避免标签被截断
plt.savefig('atom_distance_heatmap.png', dpi=300, bbox_inches='tight')
plt.show()
额外调整建议
  • 如果你需要严格保持每个单元格为正方形,可删除aspect='auto'参数,仅调整figsize的宽高比等于数据的列行比即可,比如30列9行的场景下,设置figsize=(10,3)即可保证正方形单元格的同时尺寸合适。
  • 若原始数据列数超过50,可适当调大tick_interval到2或3,避免x轴标签过密重叠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:15:01