如何使用Matplotlib将3张独立分析图表合并至同一画布中
多图合并到同一画布实现方法
直接使用matplotlib的子图接口创建3行1列的布局,将3张趋势图分别放置到对应子区域即可,不需要额外依赖其他库。
完整可运行代码
import pandas as pd import matplotlib.pyplot as plt # 数据读取与预处理 laptop_defects = pd.read_excel('/content/Data_Analysis_Project.xlsx') laptop_defects['Defect Rate'] = round(laptop_defects['Defects'] / laptop_defects['Opportunities'] * 1000000, 0) month_col = laptop_defects['Month ID(YYYYMM)'] # 创建包含3个垂直排列子图的画布,设置合适尺寸,共享x轴保证时间对齐 fig, (ax_defect, ax_opp, ax_rate) = plt.subplots( nrows=3, ncols=1, figsize=(10, 14), sharex=True ) # 绘制第一张图:月度Defects趋势 ax_defect.plot(month_col, laptop_defects['Defects'], color='#1f77b4') ax_defect.set_title('月度Defects变化趋势') ax_defect.set_ylabel('缺陷数量') ax_defect.grid(alpha=0.3) # 绘制第二张图:月度Opportunities趋势 ax_opp.plot(month_col, laptop_defects['Opportunities'], color='#ff7f0e') ax_opp.set_title('月度Opportunities变化趋势') ax_opp.set_ylabel('检测基数') ax_opp.grid(alpha=0.3) # 绘制第三张图:带均值、控制限的Defect Rate趋势 ax_rate.plot(month_col, laptop_defects['Defect Rate'], label='Defect Rate', color='#2ca02c') ax_rate.plot(month_col, laptop_defects['Mean Rate'], label='Mean Rate', color='#d62728', linestyle='--') ax_rate.plot(month_col, laptop_defects['2 Sigma limit'], label='2 Sigma Limit', color='#9467bd', linestyle=':') ax_rate.plot(month_col, laptop_defects['3 Sigma limit'], label='3 Sigma Limit', color='#8c564b', linestyle=':') ax_rate.set_title('带均值与控制限的月度Defect Rate变化趋势') ax_rate.set_ylabel('每百万单位缺陷数') ax_rate.set_xlabel('月份(YYYYMM)') ax_rate.legend() ax_rate.grid(alpha=0.3) # 自动调整排版,避免标签、标题重叠 plt.tight_layout() plt.show()
关键配置说明
nrows=3, ncols=1指定画布按3行垂直排布子图,所有子图同属一个figure对象sharex=True让3张子图共用时间x轴,避免重复显示刻度,同时保证三个图表的时间节点完全对齐- 每个子图通过独立的
ax对象调用绘图方法,单独配置标题、标签、样式,不会互相覆盖 plt.tight_layout()自动计算子图间距,解决文字重叠问题
原独立图表参考



内容的提问来源于stack exchange,提问作者Alice T
相关产品推荐
相关产品推荐

