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

use*_*827 4 python plot pandas

            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
Run Code Online (Sandbox Code Playgroud)

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

df['valu'].plot()
Run Code Online (Sandbox Code Playgroud)

然而,这将所有内容显示为单线图。如何达到上述目标?

ber*_*nie 5

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

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()
Run Code Online (Sandbox Code Playgroud)

结果:

在此输入图像描述