循环绘制Matplotlib图表时,如何正确设置标题?
循环绘图标题不显示的解决办法
你的代码有两个核心问题:一是plt.plot()写在了循环外面,导致只有最后一次的计算结果被绘制,前面循环创建的空figure自然看不到标题;二是你可能用错了标题设置的方法(比如fig.subtitle是拼写错误,正确是fig.suptitle)。
修正后的代码如下:
plotData.sort_values(by=['segment']) for date in plotData.month_of_default.unique(): # 创建figure并保存对象,方便设置全局标题 fig = plt.figure() fig.suptitle(f"数据概览: 违约月份 {date}", fontsize=16) temp = plotData[plotData.month_of_default == date][['New_Amount_2','ID','segment','total','payment','month']] denom = temp.drop_duplicates(subset=['ID']).groupby('segment')['total'].sum() test = temp.groupby(['segment','month']).New_Amount_2.sum().groupby(level=0).cumsum()/denom # 把绘图语句移到循环内,每个日期对应一张图 plt.plot(test.unstack().T) # 设置当前子图的标题,和全局标题区分开 plt.title(f"累计金额趋势", fontsize=12) # 可选:如果是脚本运行,加这个会逐个弹出图表,避免重叠 plt.show()
关键细节:
- 绘图语句必须在循环内:每个
date对应的test数据都要在循环里绘制,不然前面创建的figure都是空的,标题根本没地方显示。 - 标题设置的正确语法:
- 单图场景用
plt.title()最直接,会给当前活跃的子图加标题。 - 如果要加全局大标题,用
fig.suptitle()(注意是suptitle不是subtitle)。 - 也可以先获取坐标轴对象再设置:
ax = plt.gca(),然后ax.set_title("你的标题"),这种方式更灵活,适合复杂绘图。
- 单图场景用
- plt.show()的作用:在脚本里运行时,循环内加这个会让每个图表单独显示;如果是Jupyter Notebook,不加也能显示,但加了可以避免图表重叠。
内容的提问来源于stack exchange,提问作者user13948
相关产品推荐
相关产品推荐

