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

Matplotlib子图仅显示最后一个imshow图像问题求助

问题原因及解决方法

你的问题出在plt.subplot()的参数使用错误上:

  • 第一个子图你用了plt.subplot(1, 1, 1),这表示创建1行1列的子图网格,并选中第1个位置的子图,这个子图会占据整个画布。
  • 后续的plt.subplot(1, 2, 2)和plt.subplot(1, 3, 3)是在不同的子图网格布局下创建的,相当于重新定义了画布布局,导致前面的子图被覆盖,最终只显示最后创建的子图。

修正后的代码

把所有子图统一设置为1行3列的布局,对应参数改为(1, 3, 1)、(1, 3, 2)、(1, 3, 3):

import matplotlib.pyplot as plt
import numpy as np

# 假设变量已定义:under10_color, under20_color, under50_color, colmap, method_list, labels

fig = plt.figure()
fig.set_figheight(6)
fig.set_figwidth(30)

# 1行3列的第1个子图
ax1 = plt.subplot(1, 3, 1)
ax1.imshow(under10_color, aspect='auto', cmap=colmap, interpolation='nearest')
ax1.title.set_text('find under 10')
ax1.set_xticks(np.arange(len(method_list)))
ax1.set_xticklabels(method_list)
ax1.set_yticks(np.arange(len(labels)))
ax1.set_yticklabels(labels)

# 1行3列的第2个子图
ax2 = plt.subplot(1, 3, 2)
ax2.imshow(under20_color, aspect='auto', cmap=colmap, interpolation='nearest')
ax2.title.set_text('find under 20')
ax2.set_xticks(np.arange(len(method_list)))
ax2.set_xticklabels(method_list)
ax2.set_yticks(np.arange(len(labels)))
ax2.set_yticklabels(labels)

# 1行3列的第3个子图
ax3 = plt.subplot(1, 3, 3)
ax3.imshow(under50_color, aspect='auto', cmap=colmap, interpolation='nearest')
ax3.title.set_text('find under 50')
ax3.set_xticks(np.arange(len(method_list)))
ax3.set_xticklabels(method_list)
ax3.set_yticks(np.arange(len(labels)))
ax3.set_yticklabels(labels)

plt.tight_layout()  # 可选:自动调整子图间距,避免标签重叠
plt.show()

补充说明

plt.subplot(nrows, ncols, index)的三个参数含义:

  • nrows:子图网格的行数
  • ncols:子图网格的列数
  • index:当前子图在网格中的位置(从左到右、从上到下从1开始编号)

只要保持所有子图的nrows和ncols一致,就能在同一个画布上显示多个子图。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:09:58