pandas 通过循环设置阈值级别实现多个hline

6pp0gazn  于 2023-03-21  发布在  其他
关注(0)|答案(1)|浏览(128)

我想在我的条形图上创建3条阈值线,但是,每一条线只会转到下一个阈值点的日期,然后将开始一条新线。这是一个包含3列的表,“现金”、“结束日期”和“期限”
我有下面的代码,但我不能让它在这些级别上循环,而是线是图的全宽:

import pandas as pd
import matplotlib.pyplot as plt

df = {'Cash':[900e6,800e6,700e6,600e6,500e6,400e6,300e6,200e6,100e6,0],
      'End Date': ['27/03/2023','28/03/2023','29/03/2023','30/03/2023','31/03/2023','01/04/2023','02/04/2023','20/09/2023','21/09/2023','21/01/2024'],
      'Tenor': ['1-3 Month','1-3 Month','1-3 Month','1-3 Month','1-3 Month','1-3 Month','1-3 Month','6 Month','6 Month','9Month']}
df = pd.DataFrame(data = df)
pd.to_datetime(df['End Date'])

fig, ax = plt.subplots(figsize=(10, 100))
for tenor, group in df.groupby('Tenor'):
    cash_out_limits = [200e6, 300e6, 500e6] # define cash out limits for each tenor
    last_end_date = group.iloc[-1]['End Date'] # get the last end date for each tenor
    start_end_date = group.iloc[0]['End Date']
    print(start_end_date)
    # create a red hline for each cash out limit
    for limit in cash_out_limits:
        ax.axhline(limit, color='r', linestyle='--')

    
# plot cash out vs end date as a bar chart
df.plot(x='End Date', y='Cash', kind='bar', ax=ax)

plt.show()

下一步是在每个tenor结束处创建垂直线直到下一个阈值点。我已经设法用last_end_date和start_end_date获得了阈值点。
有人能帮忙吗。
我试过编辑这一行,但不起作用:

for limit in cash_out_limits:  
    ax.axhline(y=limit, xmin = start_end_date, xmax = last_end_date, color='r', linestyle='--')

Graph currently looks like
What it should look like

6g8kf2rb

6g8kf2rb1#

使用额外参数控制水平线的宽度

axhline具有指定xmin和xmax的可选第二和第三参数。

Axes.axhline(y=0, xmin=0, xmax=1, **kwargs)

如果你想让水平线有个界限,这样如何?

ax.axhline(y=limit, xmin=10, xmax=20, color='r', linestyle='--')

显然,您需要根据x范围的需要,用适当的值或公式替换10和20。

相关问题