使用日期时间索引绘制数据框

时间:2017-05-05 15:19:04

标签: python pandas plot

            is_avail   valu data_source
2015-08-07     False  0.282    source_a
2015-08-23     False  0.296    source_a
2015-09-08     False  0.433    source_a
2015-10-01      True  0.169    source_a
2015-10-10      True  0.160    source_a
2015-11-02     False  0.179    source_a
2016-03-09     False  0.557    source_a
2016-04-26     False  0.770    source_a
2016-05-05     False  0.826    source_a
2016-05-12     False  0.826    source_a
2016-05-28     False  0.747    source_a
2016-06-06     False  0.796    source_a
2016-07-31     False  0.322    source_a
2016-08-25      True  0.136    source_a
2016-09-10     False  0.180    source_a
2016-11-13     False  0.492    source_a
2016-12-15      True  0.124    source_a
2016-12-31     False  0.533    source_a
2017-03-28     False  0.524    source_a
2015-06-27      True  0.038    source_b
2015-07-30      True  0.035    source_b
2015-08-06     False  0.205    source_b
2015-08-09     False  0.241    source_b
2015-08-16      True  0.025    source_b
2015-08-19      True  0.092    source_b
2015-08-26     False  0.264    source_b
2015-08-29     False  0.312    source_b

我想绘制上面数据框中的valu列,source_a行和source_b行的单独线图以及is_avail为True或False时的单独颜色。目前,我这样做:

df['valu'].plot()

然而,这显示了一切都是单线图。如何实现上述目标?

2 个答案:

答案 0 :(得分:2)

这不是一个简单的解决方案,但这是有效的。

import pandas as pd
import matplotlib.pyplot as plt
import matplotlib.dates as mdates 

df = df.sort_index()

fig, ax = plt.subplots()
for k,g in df.groupby(['is_avail','data_source'])['valu']:
    ax.plot_date(pd.to_datetime(g.index),g,'v-',label="{}, {}".format(*k))

ax.xaxis.set_major_locator(mdates.MonthLocator(interval=3))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b\n%Y'))
ax.legend()
plt.show()

结果:

enter image description here

答案 1 :(得分:2)

这个怎么样?假设您的数据位于数据框df

import pandas as pd
df.is_avail = df.is_avail.astype('str')
grouped = df.groupby(['data_source','is_avail'])

fig, ax = plt.subplots()
for lab, gr in grouped:
    gr.valu.plot(ax=ax, label = lab)
plt.legend()

solution