如何在Python中用Pandas绘制含多图例的时隙DSP峰值数据图表?
如何用Pandas绘制按Slot独立图例的DSP使用率图表
我来帮你解决这个问题——要实现像Excel那样每个Slot独立显示图例的Pandas图表,关键是调整数据的结构,让每个Slot对应的系列能被Pandas正确识别并生成单独的图例项。下面是两种可行的解决方案:
方法一:调整透视表结构,让Slot作为列
当前你的透视表把SDATE、Subrack、Slot都放在索引里,导致绘图时无法按Slot拆分系列。我们可以把Slot(加上Subrack做区分)移到列的位置,这样每个Slot对应的峰值数据会成为单独的列,绘图时自动生成对应图例。
import pandas as pd import matplotlib.pyplot as plt # 重新构造透视表:时间作为x轴索引,Subrack+Slot作为列 table = pd.pivot_table( data, index=['SDATE'], # 仅保留时间作为索引,对应x轴 columns=['Subrack', 'Slot'], # 每个Subrack+Slot组合作为单独一列 values='VS.DSP.UsagePeak', aggfunc='max' ) # 绘制图表并优化样式 table.plot(figsize=(10, 6)) # 设置合适的图表尺寸 plt.ylabel("VS.DSP.UsagePeak") plt.xticks(rotation=20, fontsize=8) # 调整x轴标签的旋转角度和字体大小 plt.xlabel("Time") plt.title("Peak DSP Usage by Slot") # 将图例放在图表外侧,避免遮挡数据 plt.legend(title='Subrack-Slot', bbox_to_anchor=(1.05, 1), loc='upper left') plt.tight_layout() # 自动调整布局,确保图例和标签完整显示 plt.show()
如果不需要区分Subrack,只把Slot作为columns参数即可:
table = pd.pivot_table( data, index=['SDATE'], columns=['Slot'], values='VS.DSP.UsagePeak', aggfunc='max' )
方法二:分组后手动绘制,自定义图例
如果需要更灵活的样式控制(比如指定每个Slot的颜色),可以用groupby分组后逐个绘制,手动设置图例标签:
import pandas as pd import matplotlib.pyplot as plt # 按Subrack和Slot分组,确保每个Slot的系列独立 groups = data.groupby(['Subrack', 'Slot']) plt.figure(figsize=(10, 6)) for (subrack, slot), group in groups: # 计算每个Slot每天的峰值 daily_peak = group.groupby('SDATE')['VS.DSP.UsagePeak'].max() # 绘制并设置图例标签 daily_peak.plot(label=f"Subrack {subrack} - Slot {slot}") # 配置图表样式 plt.ylabel("VS.DSP.UsagePeak") plt.xticks(rotation=20, fontsize=8) plt.xlabel("Time") plt.title("Peak DSP Usage by Slot") plt.legend(title='Slot Details', bbox_to_anchor=(1.05, 1), loc='upper left') plt.tight_layout() plt.show()
这两种方法都能实现你想要的效果——每个Slot对应独立的图例项,和Excel示例一致。你可以根据自己的需求选择其中一种。
内容的提问来源于stack exchange,提问作者Sadegh
相关产品推荐
相关产品推荐

