如何使用pandas和matplotlib绘制含指定与共享索引的子图
解决方案
直接按机型、来源维度分组聚合均值后,创建子图分别绘制即可,完整可运行代码如下:
import matplotlib.pyplot as plt import pandas as pd # 原始数据集 d={ 'modele':[330,550,550,330,550,550,550], 'source':['client','prod','prod','prod','client', 'prod', 'prod'], 'duree':[200,300,400,80,30,800,20] } df = pd.DataFrame(d) # 按机型、来源分组计算时长均值,重构为方便取数的结构 mean_df = df.groupby(['modele', 'source'])['duree'].mean().unstack() # 初始化1行2列的子图 fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(10,4)) # 550机型子图:client红柱、prod绿柱 ax1.bar(mean_df.loc[550].index, mean_df.loc[550].values, color=['red', 'green']) ax1.set_title('Modele 550') ax1.set_ylabel('Average Duree (seconds)') # 330机型子图,规则同上 ax2.bar(mean_df.loc[330].index, mean_df.loc[330].values, color=['red', 'green']) ax2.set_title('Modele 330') plt.tight_layout() plt.show()
关键步骤说明:
groupby(['modele', 'source'])['duree'].mean()先完成两个维度的均值计算,unstack()将来源维度转为列,方便直接按机型索引取对应来源的均值- 绘制柱形时直接指定颜色顺序为红、绿,对应client、prod两个来源的数值
tight_layout()自动调整子图间距,避免标题、标签重叠。
内容的提问来源于stack exchange,提问作者TheBigBot
相关产品推荐
相关产品推荐

