如何使用matplotlib子图为每行绘制线形图?

时间:2019-09-06 08:47:48

标签: python dataframe matplotlib

我正在尝试使用子图为数据的每一行绘制债券收益率曲线(折线图)。我该如何使用循环来创建它?可以有5乘20的图(总共100个子图)吗?

这是我正在处理的数据框。我看过另一篇文章,并提出了以下代码。 https://imgur.com/HbsqI8i

df = pd.read_csv("treasury_yields.csv")

fig, ax = plt.subplots(nrows=20, ncols=5)

for row in ax:
    for col in row:
        col.plot(x, y)

plt.show()

https://imgur.com/djX5dQS

我希望生成类似于上图的内容。我还很新,我不确定从哪里开始。

2 个答案:

答案 0 :(得分:0)

import matplotlib.pyplot as plt
import pandas as pd

df = pd.read_csv("treasury_yields.csv")

fig, ax = plt.subplots(nrows=20, ncols=5)

for row in range(20):
    for col in range(5):
        ax[row,col].plot(x, y)

plt.show()

答案 1 :(得分:0)

您可以执行以下操作:

提供此数据:

            1 mo  2 mo   3 mo   6 mo  1 yr  2 yr  3 yr  5 yr  7 yr  10 yr  \
30/11/2018  2.31   2.33   2.37  2.52  2.70  2.80  2.83  2.84  2.92   3.01   
31/12/2018  2.44   2.45   2.45  2.56  2.63  2.48  2.46  2.51  2.59   2.69   
31/01/2019  2.42   2.43   2.41  2.46  2.55  2.45  2.43  2.43  2.51   2.63   
28/02/2019  2.44   2.47   2.45  2.50  2.54  2.52  2.50  2.52  2.63   2.73   
31/03/2019  2.43   2.44   2.40  2.44  2.40  2.27  2.21  2.23  2.31   2.41   
30/04/2019  2.43   2.44   2.43  2.46  2.39  2.27  2.24  2.28  2.39   2.51   
31/05/2019  2.35   2.38   2.35  2.35  2.21  1.95  1.90  1.93  2.03   2.14   
30/06/2019  2.18   2.15   2.12  2.09  1.92  1.75  1.71  1.76  1.87   2.00   
31/07/2019  2.01   2.07   2.08  2.10  2.00  1.89  1.84  1.84  1.92   2.02   
31/08/2019  2.10   2.04   1.99  1.89  1.76  1.50  1.42  1.39  1.45   1.50   
            20 yr  30 yr  
30/11/2018   3.19   3.30  
31/12/2018   2.87   3.02  
31/01/2019   2.83   2.99  
28/02/2019   2.94   3.09  
31/03/2019   2.63   2.81  
30/04/2019   2.75   2.93  
31/05/2019   2.39   2.58  
30/06/2019   2.31   2.52  
31/07/2019   2.31   2.53  
31/08/2019   1.78   1.96  

代码:

fig, axes = plt.subplots(nrows=2, ncols=5, figsize=(16, 8))

for row, ax in zip(df.index, axes.flatten()):
    ax.plot(df.loc[row].values)
    ax.set_title(row, fontsize=10)
    ax.set_xticks(range(df.shape[1]))
    ax.set_xticklabels(list(df.columns), rotation=90, fontsize=8)
plt.show()

结果: enter image description here

您可能需要整理一下,然后将其扩展为(20,5)尺寸。

也请参阅本教程,其外观类似于您想要的内容:https://napsterinblue.github.io/notes/python/viz/subplots/

除了在这种情况下,他们绘制的是列而不是行。