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
相关产品推荐
相关产品推荐

