Matplotlib 绘制二维形状而不是一维线
Matplotlib plots 2D shapes instead of 1D lines
我正在尝试绘制美国国债收益率曲线。我在以下 pandas 数据框中获得了数据:
所以,基本上我想根据索引绘制数据框的 3 列,并且想要有 3 行。但是当我尝试这样做时,我得到的不是线条而是相互重叠的二维形状,如下所示:
我尝试同时使用 Pandas 中的 df.plot()
和常用的 plt.plot()
命令,但它们给出了相同的结果。如何从这些二维形状制作一维线条?
在您显示的图中,这些是 实际上 行,但它们彼此靠得很近,似乎有一个彩色区域。
创建虚假数据框:
df = pd.DataFrame({'date': pd.date_range(start = '1990-01-02', end = '2020-12-31', freq = 'D')})
df['DGS1'] = 10*np.random.random(len(df))
df['DGS10'] = 10*np.random.random(len(df))
df['DGS5'] = 10*np.random.random(len(df))
df = df.set_index('date')
绘图:
df.plot()
plt.show()
随意区域放大:
plt.xlim('2003-03-07', '2003-08-04')
再次缩放:
plt.xlim('2003-04-07', '2003-04-22')
如果您可以放大某些感兴趣的区域,则可以保持数据框不变,否则您可以使用 pandas.DataFrame.resample
对数据进行重新采样。请注意,此操作会更改您的原始数据,因此您必须小心解释您将获得的图表。
一个可行的例子可能是以 1 个月的频率对数据帧重新采样并计算每个月的平均值:
df = df.resample('1M').mean()
我正在尝试绘制美国国债收益率曲线。我在以下 pandas 数据框中获得了数据:
所以,基本上我想根据索引绘制数据框的 3 列,并且想要有 3 行。但是当我尝试这样做时,我得到的不是线条而是相互重叠的二维形状,如下所示:
我尝试同时使用 Pandas 中的 df.plot()
和常用的 plt.plot()
命令,但它们给出了相同的结果。如何从这些二维形状制作一维线条?
在您显示的图中,这些是 实际上 行,但它们彼此靠得很近,似乎有一个彩色区域。
创建虚假数据框:
df = pd.DataFrame({'date': pd.date_range(start = '1990-01-02', end = '2020-12-31', freq = 'D')})
df['DGS1'] = 10*np.random.random(len(df))
df['DGS10'] = 10*np.random.random(len(df))
df['DGS5'] = 10*np.random.random(len(df))
df = df.set_index('date')
绘图:
df.plot()
plt.show()
随意区域放大:
plt.xlim('2003-03-07', '2003-08-04')
再次缩放:
plt.xlim('2003-04-07', '2003-04-22')
如果您可以放大某些感兴趣的区域,则可以保持数据框不变,否则您可以使用 pandas.DataFrame.resample
对数据进行重新采样。请注意,此操作会更改您的原始数据,因此您必须小心解释您将获得的图表。
一个可行的例子可能是以 1 个月的频率对数据帧重新采样并计算每个月的平均值:
df = df.resample('1M').mean()