matplotlib 使用python Dataframe 的海运线子图

9bfwbjaz  于 2023-03-13  发布在  Python
关注(0)|答案(1)|浏览(183)

下面是我的数据框。每个中心可以有不同的状态

Center  Month Start State   Cost          Cost FACTOR
376  1/1/2022   NC  1035.44608  1098.82707
376  2/1/2022   SC  1098.82707  1407.55259
890  3/1/2022   NC  1407.55259  1356.45088
890  4/1/2022   GA  1356.45088  1305.31729
376  5/1/2022   GA  1305.31729  1466.9539
890  9/1/2022   NC  2148.07146  2024.72621
376  10/1/2022  NC  2024.72621  1859.82234
754  11/1/2022  SC  1859.82234  1520.82405
754  12/1/2022  NC  1520.82405  1528.37079
754  1/1/2023   GA  1528.37079  516.421

我尝试使用海运线子图来绘制成本和成本因子,使用循环使用枚举,通过传递 Dataframe 列(中心和状态)作为参数。但所有3个子批次都给出相同的结果。
以下代码给出了3个具有相同图形值的子图。
我期待以下内容

  1. 3行子批次,按“中心”显示“成本”和“成本系数”
    1.显示每个中心和州组合的“成本”和“成本系数”的线路子标段
import matplotlib.pyplot as plt 
import seaborn as sns 
center = df_test.CENTER.unique() 
fig, ax = plt.subplots(nrows=3, ncols=1, figsize=(20, 12)) 
for i, col in enumerate(center):
    xp = df_test['MONTH_START']     
    yp = df_test['COST']     
    Yp = df_test['COST_FACTOR']     
    sns.lineplot(x=xp, y=yp,data=col,ax=ax[i])     
    sns.lineplot(x=xp, y=Yp,data=col,ax=ax[i]) 
    ax[i].legend([f'center {col}'])
qlfbtfca

qlfbtfca1#

如果我理解正确的话,你正试图为每个中心绘制3个图......要做到这一点,你需要改变循环,每次都要过滤数据,这样你就只得到特定的中心。另外,需要在图例和标题方面做一些调整。更新了下面的代码。希望这是你正在寻找的......

import matplotlib.pyplot as plt 
import seaborn as sns 
center = df_test.CENTER.unique() 
fig, ax = plt.subplots(nrows=3, ncols=1, figsize=(20, 12)) 

for i in range(len(center)):  ## For each center
    df=df_test[df_test['CENTER'] == center[i]]  ## Get the filtered data
    sns.lineplot(x='MONTH_START', y='COST',data=df,ax=ax[i])  ## Plot cost
    sns.lineplot(x='MONTH_START', y='COST_FACTOR',data=df,ax=ax[i]) ## Plot cost facte
    ax[i].legend(['Cost', 'Cost Factor'])   ## Legend should have the two lines 
    ax[i].title.set_text(f'center {center[i]}')  ## Title for each sub plot
    
plt.tight_layout() ## Finally use this so that the title and axis text dont overlap

输出图

相关问题