使用matplotlib绘制日期有间隔的数据框

时间:2019-01-06 21:04:12

标签: python pandas matplotlib

我有一个如下数据框:

import pandas as pd
import numpy as np
period0 = pd.date_range('1/1/2011', periods=50, freq='D')
period1 = pd.date_range('18/5/2012', periods=50, freq='D')
period2 = pd.date_range('7/11/2014', periods=50, freq='D')
df = pd.concat((pd.DataFrame(period0), pd.DataFrame(period1), pd.DataFrame(period2)), axis=0)

df['y'] = pd.DataFrame(np.random.rand(150,1))

可以任意选择这些日期和期间,以创建一些间隔和日期。

当我尝试绘制数据框时,matplotlib会自动在日期间隔之间绘制一条线:

plt.plot(df[0], df['y'])

结果: enter image description here

我还尝试了dotplot。但这并不能阻止情节创建线条:

plt.plot(df[0], df['y'], ':')

结果: enter image description here

我还发现了一个relevant question。不幸的是,它没有解决我的问题。

那我该怎么办?

2 个答案:

答案 0 :(得分:1)

您应该将不想看到的值定义为NaN:

https://matplotlib.org/examples/pylab_examples/nan_test.html

例如:

df.index = df[0].astype('datetime64')
#defining df[0] as index

idx = pd.date_range(start = '1/1/2011', end = max(period2), freq='D')
#creating new index

df = df.reindex(idx)
#reindexing df - it preserves values from 'y'

plt.plot(df.index, df['y'])
#creating plot

答案 1 :(得分:1)

如果您无法修改现有索引,则可以尝试:

df.groupby(pd.Grouper(key=0, freq='1D'))['y'].last().plot()