循环设置Matplotlib子图标题异常:仅显示最后元素问题排查
解决Matplotlib子图标题循环赋值错误的问题
你的代码问题出在循环逻辑错误:外层循环p时,每次都会通过列表推导式重新设置所有4个子图的标题,最终所有子图的标题都会被最后一次循环(p=3)的值覆盖,导致所有标题都用了name和freq的最后一个元素。
修正方案
我们需要让每个子图对应唯一的name、freq值,同时根据子图的列索引匹配supplier(A对应第0列,B对应第1列)。可以通过遍历子图的行列索引,计算对应的p值来实现:
import matplotlib.pyplot as plt name = [['1'], ['2'], ['3'],['4']] freq = ['51', '52', '53','54'] supplier = ['A', 'B'] fig1, axs = plt.subplots(2,2) # 遍历每个子图的行l和列k for l in range(2): for k in range(2): # 计算当前子图对应的p索引:行号*2 + 列号 p = l * 2 + k # 设置标题,列k对应supplier[k] axs[l, k].set_title(f'曲线:{name[p][0]}\n供应商:{supplier[k]} @ {freq[p]}') plt.tight_layout() # 自动调整标题和子图间距,避免重叠 plt.show()
说明
- 用
l和k遍历每个子图的位置,通过p = l*2 +k将2x2的子图位置映射为0-3的索引,对应name和freq的顺序; - 子图的列索引
k直接对应supplier的元素(第0列用A,第1列用B); - 添加
plt.tight_layout()可以避免标题和子图内容重叠,优化显示效果。
内容的提问来源于stack exchange,提问作者sts
相关产品推荐
相关产品推荐

