4
            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

I want to plot the valu column in the dataframe above, with separate line plots for source_a rows and source_b rows and separate colors when is_avail is True or False. Currently, I am doing this:

df['valu'].plot()

However, this shows everything as a single line plot. How to get to the objective above?

2 Answers 2

5

It's not so simple of a solution but this works afaict.

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()

Result:

enter image description here

Sign up to request clarification or add additional context in comments.

Comments

3

How about this? Assuming your data is in the dataframe 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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.